참조 된 기사는 신중합니다. 그러나 "단순하고 우아한"솔루션 이 있다고 생각 합니다. 지리 데이터 세트에는 두 가지 종류의 경계 상자가 있습니다. + -180 자오선에 걸 치지 않는 사람은 항상 저장하고 검색 할 수 있습니다. + -180 자오선을 차지하는 자들은 반 보완 형태 로 저장 될 수 있습니다 . 즉, 평소와 같이 위도 범위를 저장하지만 대신 상자에 포함 되지 않은 경도 범위를 저장하고 비트를 토글하여 어떤 형태를 나타냅니다 저장 용량이 사용되고 있습니다). 기본적으로 지리 색인이나 검색 트리 구조를 수정할 필요는 없습니다. 검색 알고리즘에는 약간의 수정 만 필요합니다.
여하튼, 질문 자체에 대한 해결책이 있습니다.
입력이 일련의 경계 상자 설명자 ((LLx, LLy), (URx, URy)) 일 것으로 예상합니다.
-540 <= LLx, -180 <= URx, LLx <= 180 및 URx <= 180. 또한 -90 <= LLy <= URy <= 90.
(경도, 위도) = (x, y)의 지점은 다음과 같은 경우에만 BB 내에있는 것으로 간주됩니다.
LLy <= y <= URy 및
어느 LLX <= X <= URX 또는 LLX - 360 <= X <= URX.
출력의 경우 모든 입력의 합집합을 포함하는 가장 작은 경계 상자의 매개 변수를 원합니다.
분명히 최소 경계 상자 (MBR)의 y- 제한은 y- 값의 최소 및 최대가됩니다. x- 제한의 경우 라인 스윕을 사용하여 가장 큰 간격 을 찾으십시오 .
다음은 알고리즘에 대한 설명입니다. 설명을 위해 입력이 네 개의 상자로 구성되어 있다고 가정합니다.
((-81,-16),(-77,80)),
((77,-19),(156,5)),
((-149,-45),(-90,81)),
((-69,-85),(-36,-76))
다음은 첫 번째 상자, 첫 번째 두 개, 첫 번째 세 개, 모든 상자의 상자 (빨간색)와 MBR (검은 색)의 다이어그램입니다.
두 번째 단계에서 동부와 서반구의 상자는 + -180도 자오선을 가로 지르는 MBR로 둘러싸여이지도에서 두 개의 별도 상자로 표시됩니다. 마지막 단계에서 남미와 남극 대륙 사이의 작은 상자를 수용하기 위해 MBR을 동쪽으로 확장해야합니다.
상자의 모든 x 좌표를 추출하고 모듈러스 360 (-180..180 범위에 배치)을 계산하고 오름차순으로 정렬 한 다음 첫 번째 값 (360 도씩 증가)을 끝에 추가하여 줄 바꿈합니다. 주위에:
-149, -90, -81, -77, -69, -36, 77, 156, 211
211과 -149는 동일한 자오선입니다.
각 x 좌표는 선행 좌표 (이전 값은 제외)와 그 사이의 간격을 나타내는 것으로 생각하십시오. 예를 들어, -77은 -81에서 -77까지의 모든 값을 나타내지 만 -81은 포함하지 않습니다. 첫 번째 이후의 각 항목에 대해 해당 간격이 포함 된 상자 수를 계산하십시오.
1, 0, 1, 0, 1, 0, 1, 0
예를 들어, 첫 번째 "1"은 하나의 상자가 -149에서 -90 사이의 간격을 포함 함을 의미합니다. (세번째 상자입니다.)
당신이 찾아로 최적화, 당신은 빨리 계산을 중지 할 수 있는 다음 X-간격에 X-간격과 이동을 포함하는 상자. 우리는 어떤 상자에 포함 되지 않는 간격을 결정하려고합니다 .
(1)에서 정렬 된 x 좌표의 첫 번째 차이점을 계산합니다.
59, 9, 4, 8, 33, 113, 79, 55
이를 (2)의 적용 범위 수와 일치시킵니다. 적용 횟수가 0 인 가장 큰 차이를 찾으십시오. 여기서는 113
이전 배열의 6 번째 요소 와 같습니다 . 이것은 상자 모음이 남긴 경도의 가장 큰 간격입니다.
(흥미롭게도, 하나 이상의 위치에서 최대 값이 발생할 가능성은 솔루션이 반드시 고유하지는 않다는 것을 보여줍니다! 상자 세트에 대해 둘 이상의 MBR이있을 수 있습니다. MBR 내에서 + -180 자오선까지의 평균 거리는 가능한 한 커야합니다. 동점을 해결하려면 가장 동쪽에있는 솔루션을 선택하십시오.)
해당 간격을 찾으십시오. 여기에서 -36에서 77 사이입니다. 이것은 MBR에 없는 경도의 범위입니다 . 따라서 보수는 -180에서 180 사이의 보수를 취하십시오. 여기서 보수는 -180에서 -36과 77에서 180 사이의 두 개의 분리 간격입니다. -180도 자오선 : 여기에서 -283에서 -36까지 (또는 77에서 324까지)
MBR의 모서리에 대해 y 값의 최소값과 최대 값을 사용하십시오.
((-283, -85), (-36, 81))