스윕 라인 별 직사각형 범위


9

불행히도 나는 혼자서 성공하지 못했습니다.

사각형 세트가 있습니다 R1..Rn 그리고 직사각형 R0. 평면 스위핑 알고리즘을 사용하여R0 완전히 세트에 의해 덮여있다 R1..Rn.

스윕 라인 알고리즘의 원리에 대한 자세한 내용은 여기를 참조 하십시오 .

처음부터 시작합시다. 처음에는 스윕 라인 알고리즘을 두 개의 데이터 구조가 필요한 라인 세그먼트 교차점 을 찾기위한 알고리즘으로 알고 있습니다 .

  • 세트 Q 이벤트 포인트 (세그먼트 및 교차점의 엔드 포인트를 저장함)
  • 상태 T (스위프 라인이 교차하는 세그먼트 세트에 대한 동적 구조)

일반적인 아이디어 : 스윕 라인을 가정l왼쪽에서 사각형 세트에 접근하기 시작하는 수직선입니다. 모두 정렬x 사각형의 좌표를 저장하고 Q 오름차순-걸릴 O(nlogn). 첫 번째 이벤트 지점부터 시작하여 모든 지점에 대해 주어진 사각형 세트를 결정하십시오.x 좌표, 교차 사각형의 연속 세그먼트를 식별하고 그들이 커버하는지 확인 R0 완전히 현재 x동등 어구. 와T 이진 트리로 O(logn). 의 경우R0 발견되지 않은 채 R0 완전히 커버되지 않았습니다.

세부 사항 : 세그먼트 교차 알고리즘의 아이디어는 인접한 세그먼트 만 교차한다는 것이 었습니다. 이 사실을 바탕으로 우리는 지위를 구축했습니다.T알고리즘 전체에 걸쳐 유지했습니다. 이 경우 비슷한 아이디어를 찾으려고 노력했지만 지금까지 성공하지 못했습니다. 단일 두 사각형이 해당하는 경우 교차합니다.xy 좌표가 겹칩니다.

문제는 구축하고 유지하는 방법입니다 T구축 및 유지 관리의 복잡성 T입니다. 이 경우 R 트리 가 매우 유용 할 수 있다고 생각하지만 R 트리 를 사용하여 최소 경계 사각형을 결정하는 것은 매우 어렵습니다.

이 문제를 해결하는 방법, 특히 빌드하는 방법에 대한 아이디어가 있습니까? T?


1
이 축 정렬 사각형입니까? (둘 중 어느 쪽이든 할 수 있지만 가능하면 더 쉽습니다.)
Louis

@Louis, 조금 단순화 해 보자. 축 정렬 사각형이 있다고 가정하자. 물론 일반적인 경우가 더 흥미 롭다
com

사각형의 어느 지점이 이벤트 지점입니까? 모든 코너, 왼쪽 상단 ...?
Raphael

@Raphael, x만이 이벤트 포인트입니다
com

답변:


6

시작하자 n일종의 쉬운 직접 인수가 있기 때문에 축 정렬 사각형. 수직선을 쓸어 보겠습니다. 이벤트는 사각형의 가로 가장자리 끝점입니다. 스윕 할 때 스윕 라인에서 "발견 된"간격을 유지합니다.Ri, i1:

  • 직사각형으로 덮인 수직 간격을 추가하십시오 Ri 처음 만났을 때 스윕 라인으로 Ri
  • 직사각형으로 덮인 수직 간격을 제거하십시오. Ri 지나갈 때 스윕 라인에서 Ri

이진 트리를 사용하면 쉽게 업데이트 할 수 있습니다. O(logn)시각. (문제는 본질적으로 1 차원입니다. 끝 점이 가리지 않는 간격인지 확인하고 제거 할 때 끝점을 추가하고 늘릴 때 적절하게 확장 / 병합합니다.)

그런 다음 R0, 발견 된 간격이 수직 범위와 교차하지 않습니다. R0. 모든 것은O(nlogn) 시간 O(n) 우주.

일반적인 경우, 명백한 트릭은 그리 빠르지 않습니다. 표준 스윕 라인 알고리즘을 사용하여 사각형으로 유도 된 전체 평면 분할을 계산하십시오.

분명히 디스크와 같은 세트 F 얼굴 덮개 R0. 우리가 관심이있는 것은이 얼굴이 내부에 있는지 여부이기 때문에 그 자체로는 충분하지 않습니다.R0다른 사각형 바깥쪽에 이를 위해 구성을 약간 수정하여 모서리를 추가 할 때 내부에 사각형의 ID로 한쪽에 태그를 지정합니다. 이것은 추가O(1) 오버 헤드, 그래서 건설은 O(n2logn)시각; 사각형에 대한 가정이 없으면 출력은Ω(n2) 우리는 최악의 경우에 그 많은 공간을 사용하고 있기 때문에 "출력에 민감하지"않지만 시간은 "실제적으로 최적"입니다.

드디어, R0 얼굴이없는 한 덮여있다 F 모서리 중 하나에 태그가없는 모서리 만 Ri. 요점은f ~에있다 Ri그런 다음 전체 f뿐만 아니라. 한 줄을 쓸어가 있다고 상상해보십시오f 이 가장자리를 따라 직교하여 Ri 외부의 f 또는 f 하나 이상의 가장자리에 의해 경계 Ri.

결론은 특별한 경우는 O(nlogn) 그리고 일반적인 것은 O(n2logn) 적어도, 나는 그것이 향상 될 수 있다고 생각합니다.


답장 해주셔서 매우 감사합니다. 일반적인 경우에 대해 명확히하고 싶은 것은 거의 없습니다.Q -이벤트 포인트는 x 미리 정렬 된 좌표, T -상태- "발견되지 않은"간격 (간격에 해당하는 것으로 알고 있음) xi 중 하나의 R다른 사람이 발견 한 Ri,i1. 와 부분R0나는 이해하지 못했다. 인터벌과 교차하는지 확인해야 할 모든 반복 (추가)에 대해 생각합니다.R0, 맞아?
com

일반적인 경우, 기본적으로 사각형으로 유도 된 전체 평면 맵을 구성하는 방법을 알고 있다고 가정 하고이의 얼굴이 완전히 있다고 주장합니다 Ri 경계 가장자리 중 하나가 "내부"에있는 경우 Ri. 세그먼트가 스윕 라인에 추가 될 때 세그먼트의 "내부"및 "외부"방향을 기록하여 일반적인 스윕 알고리즘 (예 : "마크"책)에서이를 추적 할 수 있습니다.
Louis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.