Line Sweep Algorithms  원저자: bmerry  발표자: 심준현
목   차Line Sweep
 Events
Closest Pair
Line Segment Intersections
Union of Rectangles
Convex Hull
Manhattan Minimum Spanning TreeLine Sweep좌표평면에서 x축 또는 y축과 평행한 선으로 탐색하며주어진 점이나 직선을 탐색Event를 기준으로 움직임
Event각 직선/도형의 끝 지점컴퓨터의 특성상 연속적인 이동이 불가능하므로이 지점들의 좌표를 오름차순/내림차순으로 탐색
Closest Pair여러 개의 점들 중 가장 가까운 두 점 찾기단순 비교 -O(n^2)로 가능더 효율적인 방법은?
Closest Pair현재까지 최소 길이 h,현재까지 처리한 점의 개수 N-1X좌표 기준으로 점들을 정렬왼쪽에서부터 차례대로 처리점을 처리할 때 Set에 넣고다음 점으로 넘어갈 때나h가 감소할 때 Set에서 제거
Closest PairN번째 점과의 거리가h보다 가까운 점을 찾으려면현재 Set에 들어있으면서 N과의 x좌표, y좌표 차이가 각각 h 이하인 점들만 비교 대상Set의 원소들은 Y좌표로 정렬-> 정렬 시    Balanced Binary Tree 사용-> 탐색 Complexity O(log n)-> 전체 Complexity O(n log n)
Line Segment Intersections직선끼리 교점 세기 문제X좌표를 기준으로 이벤트 구분   1) X축에 평행한 직선의 양 끝   2) X축에 수직인 직선처음 Range로 들어갈 때 Set에 직선 추가(Set은 Y 좌표로 정렬)빠져나올 때 Set에서 제거수직선을 만나면 Set에 포함된 선분들의 Y 좌표를 Range Search해서 결과값에 추가
Line Segment Intersections직선끼리 교점 세기 문제X좌표를 기준으로 이벤트 구분   1) X축에 평행한 직선의 양 끝   2) X축에 수직인 직선처음 Range로 들어갈 때 Set에 직선 추가(Set은 Y 좌표로 정렬)빠져나올 때 Set에서 제거수직선을 만나면 Set에 포함된 선분들의 Y 좌표를 Range Search해서 결과값에 추가
좀더 복잡한 경우…직선의 양 끝점과 Set 내 직선들의 교점까지 저장Priority Queue를 사용한 데이터 관리
Union of Rectangles사각형 안쪽의 넓이의 합 구하기X좌표를 기준으로 이벤트 구분   : 각사각형의 왼쪽, 오른쪽 모서리처음 왼쪽 모서리를 만났을 때 Set에 사각형 추가, 빠져나올 때 Set에서 제거넓이 = Σ(어떤 이벤트의 X좌표-이전 이벤트의 X좌표)*(cut length)

Line sweep algorithms

  • 1.
    Line Sweep Algorithms 원저자: bmerry 발표자: 심준현
  • 2.
    차Line Sweep
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    Manhattan Minimum SpanningTreeLine Sweep좌표평면에서 x축 또는 y축과 평행한 선으로 탐색하며주어진 점이나 직선을 탐색Event를 기준으로 움직임
  • 9.
    Event각 직선/도형의 끝지점컴퓨터의 특성상 연속적인 이동이 불가능하므로이 지점들의 좌표를 오름차순/내림차순으로 탐색
  • 10.
    Closest Pair여러 개의점들 중 가장 가까운 두 점 찾기단순 비교 -O(n^2)로 가능더 효율적인 방법은?
  • 11.
    Closest Pair현재까지 최소길이 h,현재까지 처리한 점의 개수 N-1X좌표 기준으로 점들을 정렬왼쪽에서부터 차례대로 처리점을 처리할 때 Set에 넣고다음 점으로 넘어갈 때나h가 감소할 때 Set에서 제거
  • 12.
    Closest PairN번째 점과의거리가h보다 가까운 점을 찾으려면현재 Set에 들어있으면서 N과의 x좌표, y좌표 차이가 각각 h 이하인 점들만 비교 대상Set의 원소들은 Y좌표로 정렬-> 정렬 시 Balanced Binary Tree 사용-> 탐색 Complexity O(log n)-> 전체 Complexity O(n log n)
  • 13.
    Line Segment Intersections직선끼리교점 세기 문제X좌표를 기준으로 이벤트 구분 1) X축에 평행한 직선의 양 끝 2) X축에 수직인 직선처음 Range로 들어갈 때 Set에 직선 추가(Set은 Y 좌표로 정렬)빠져나올 때 Set에서 제거수직선을 만나면 Set에 포함된 선분들의 Y 좌표를 Range Search해서 결과값에 추가
  • 14.
    Line Segment Intersections직선끼리교점 세기 문제X좌표를 기준으로 이벤트 구분 1) X축에 평행한 직선의 양 끝 2) X축에 수직인 직선처음 Range로 들어갈 때 Set에 직선 추가(Set은 Y 좌표로 정렬)빠져나올 때 Set에서 제거수직선을 만나면 Set에 포함된 선분들의 Y 좌표를 Range Search해서 결과값에 추가
  • 15.
    좀더 복잡한 경우…직선의양 끝점과 Set 내 직선들의 교점까지 저장Priority Queue를 사용한 데이터 관리
  • 16.
    Union of Rectangles사각형안쪽의 넓이의 합 구하기X좌표를 기준으로 이벤트 구분 : 각사각형의 왼쪽, 오른쪽 모서리처음 왼쪽 모서리를 만났을 때 Set에 사각형 추가, 빠져나올 때 Set에서 제거넓이 = Σ(어떤 이벤트의 X좌표-이전 이벤트의 X좌표)*(cut length)