Các bài viết tham khảo là chu đáo. Tuy nhiên, tôi tin rằng có là một "đơn giản và thanh lịch" giải pháp: cho tập hợp dữ liệu địa lý, có hai loại hộp bounding. Những người không đi theo kinh tuyến + -180 có thể được lưu trữ và tìm kiếm như mọi khi. Những người thực hiện nối kinh tuyến + -180 có thể được lưu trữ ở dạng bán bổ sung : cụ thể là lưu trữ phạm vi vĩ độ như bình thường, nhưng thay vào đó lưu trữ phạm vi kinh độ không có trong hộp (và chuyển một chút để chỉ ra dạng nào của lưu trữ đang được sử dụng). Về cơ bản không cần sửa đổi đối với các chỉ mục địa lý hoặc tìm kiếm cấu trúc cây; chỉ cần một sửa đổi nhỏ cho các thuật toán tìm kiếm.
Ở mức nào, đây là một giải pháp cho chính câu hỏi.
Tôi đoán bạn dự đoán đầu vào là một chuỗi các mô tả hộp giới hạn ((LLx, LLy), (URx, URy)) trong đó:
-540 <= LLx, -180 <= URx, LLx <= 180 và URx <= 180. Ngoài ra -90 <= LLy <= URy <= 90.
một điểm tại (kinh độ, vĩ độ) = (x, y) được coi là nằm trong BB khi và chỉ khi
LLy <= y <= URy và
hoặc LLx <= x <= URx hoặc LLx - 360 <= x <= URx.
Đối với đầu ra, bạn muốn các tham số cho hộp giới hạn nhỏ nhất chứa liên kết của tất cả các đầu vào.
Rõ ràng giới hạn y của hộp giới hạn tối thiểu (MBR) sẽ là mức tối thiểu và tối đa của các giá trị y. Đối với giới hạn x, sử dụng quét dòng để tìm khoảng cách lớn nhất .
Đây là một mô tả của thuật toán. Để minh họa, giả sử đầu vào bao gồm bốn hộp,
((-81,-16),(-77,80)),
((77,-19),(156,5)),
((-149,-45),(-90,81)),
((-69,-85),(-36,-76))
Dưới đây là sơ đồ của các hộp (màu đỏ) và MBR (màu đen) của hộp đầu tiên, sau đó là hai hộp đầu tiên, sau đó là ba hộp đầu tiên, sau đó là tất cả các hộp.
Lưu ý cách ở bước thứ hai, các hộp ở bán cầu đông và tây được bao quanh bởi một MBR vượt qua kinh tuyến + -180 độ, làm cho nó xuất hiện dưới dạng hai hộp riêng biệt trên bản đồ này. Ở bước cuối cùng, MBR đó phải được mở rộng về phía đông để chứa một hộp nhỏ giữa Nam Mỹ và Nam Cực.
Trích xuất tất cả các tọa độ x của các hộp, tính toán modulo 360 (để đặt chúng trong phạm vi -180..180), sắp xếp chúng tăng dần và nối giá trị đầu tiên (tăng 360 độ) vào cuối để làm cho chúng bao bọc xung quanh:
-149, -90, -81, -77, -69, -36, 77, 156, 211
(Lưu ý rằng 211 và -149 là cùng một kinh tuyến.)
Hãy nghĩ về mỗi tọa độ x là đại diện cho khoảng giữa tọa độ trước (nhưng không bao gồm giá trị trước đó) và nó. Ví dụ: -77 đại diện cho tất cả các giá trị từ -81 đến -77 nhưng không bao gồm -81. Đối với mỗi hộp sau lần đầu tiên, hãy đếm số lượng hộp chứa khoảng đó.
1, 0, 1, 0, 1, 0, 1, 0
Ví dụ: "1" đầu tiên có nghĩa là một hộp bao gồm khoảng từ 4949 đến -90. (Đó là hộp thứ ba.)
Để tối ưu hóa, bạn có thể dừng việc đếm ngay khi bạn tìm thấy bất kỳ hộp nào có khoảng x và chuyển sang khoảng x tiếp theo. Chúng tôi chỉ cố gắng xác định khoảng thời gian nào có thể không được bao phủ bởi bất kỳ hộp nào.
Tính toán sự khác biệt đầu tiên của tọa độ x được sắp xếp trong (1).
59, 9, 4, 8, 33, 113, 79, 55
Kết hợp những điều này với số lượng bảo hiểm trong (2). Tìm sự khác biệt lớn nhất mà số lượng bảo hiểm là 0. Ở đây, nó bằng 113
, phần tử thứ sáu của mảng trước. Đây là khoảng cách lớn nhất về kinh độ còn lại của bộ sưu tập các hộp.
(Thật thú vị, khả năng tối đa xảy ra tại nhiều hơn một vị trí cho thấy giải pháp không nhất thiết là duy nhất! Có thể có nhiều hơn một MBR cho một bộ hộp. Bạn có thể xác định một điều kiện duy nhất bằng cách thêm các điều kiện bổ sung, chẳng hạn như yêu cầu rằng khoảng cách trung bình trong MBR đến kinh tuyến + -180 càng lớn càng tốt; để giải quyết một mối ràng buộc, chọn (nói) giải pháp cực đông.)
Tìm khoảng thời gian tương ứng: ở đây, từ -36 đến 77. Đây là phạm vi kinh độ không có trong MBR. Do đó, hãy lấy phần bù của nó trong phạm vi từ -180 đến 180. Ở đây, phần bù là hai khoảng cách khác nhau, một từ -180 đến -36 và một phần khác từ 77 đến 180. Ngoài ra, biểu thị phần bù dưới dạng một hình chữ nhật duy nhất có thể đặt trên + Kinh tuyến -180 độ: từ -283 đến -36 tại đây (hoặc, tương đương, từ 77 đến 324).
Sử dụng giá trị tối thiểu và tối đa của các giá trị y cho các góc của MBR.
((-283, -85), (-36, 81))