포춘 알고리즘
Fortune's algorithm포춘 알고리즘은 O(n log n) 시간과 O(n) 공간을 사용하여 평면의 점 집합에서 보로노이 다이어그램을 생성하기 위한 스위프 라인 알고리즘이다.[1][2]원래 스티븐 포춘이 1986년 자신의 논문 '보로노이 다이어그램의 스위플린 알고리즘'[3]에서 발표한 것이다.
알고리즘 설명
알고리즘은 스위프 라인과 비치 라인을 모두 유지하며, 이 둘 다 알고리즘이 진행됨에 따라 평면을 통해 이동한다.스윕 라인은 직선으로, 관례상 수직으로 되어 있고 비행기를 가로질러 왼쪽에서 오른쪽으로 이동한다고 가정할 수 있다.알고리즘이 진행되는 동안 언제든지 스위프 라인의 왼쪽 입력 지점이 보로노이 다이어그램에 통합되는 반면 스위프 라인의 오른쪽 지점은 아직 고려되지 않을 것이다.비치 라인은 직선이 아니라, 포물선 조각들로 구성된 스위프 라인 왼쪽의 복잡하고 단편적인 곡선이다. 이 곡선은 다른 어떤 지점이 스위프 라인의 오른쪽인지에 관계 없이, 보로노이 다이어그램이 알 수 있는 비행기의 부분을 나머지 부분으로부터 나눈다.스위프 라인의 왼쪽 지점 각각에 대해, 그 지점과 스위프 라인에서 등거리 지점의 포물선을 정의할 수 있다. 비치 라인은 이 포물선들의 결합의 경계선이다.스위프 라인이 진행되면서 두 개의 포물선이 교차하는 해변 라인의 정점이 보로노이 도표의 가장자리를 추적한다.비치 라인은 각 포물선 기지를 처음에 스위프 라인으로 쓸어넘긴 지점과 스위프 라인의 새로운 위치 사이에 정확히 절반으로 유지함으로써 진행된다.수학적으로 이것은 각 포물선이 다이렉트릭스로, 입력점을 포커스로 사용하여 형성되는 것을 의미한다.
알고리즘은 데이터 구조로 비치 라인의 결합 구조를 설명하는 바이너리 검색 트리와 비치 라인 구조를 변경할 수 있는 잠재적 미래 이벤트를 나열하는 우선순위 대기열을 유지한다.이러한 이벤트에는 비치 라인에 또 다른 포물선을 추가하고(스윕 라인이 다른 입력 지점을 통과할 때), 비치 라인에서 곡선을 제거하는 것(파라볼라가 비치 라인의 연속 세그먼트를 형성하는 3개의 입력 지점을 통해 스위프 라인이 원에 접하는 경우)이 포함된다.그러한 각 이벤트는 이벤트가 발생하는 지점에서 스위프 라인의 x 좌표로 우선순위를 정할 수 있다.그런 다음 알고리즘 자체는 우선순위 대기열에서 다음 이벤트를 반복적으로 제거하고, 비치 라인의 이벤트 원인 변경사항을 찾아내고, 데이터 구조를 업데이트하는 것으로 구성된다.
처리할 O(n) 이벤트(각각 보로노이 다이어그램의 일부 기능과 연관됨)와 이벤트를 처리하는 O(log n) 시간(각각 일정한 수의 이진 검색 트리 및 우선 순위 대기열 작업으로 구성됨)이 있으므로 총 시간은 O(n log n)이다.
가성음
let be the transformation , where is the Euclidean distance between z and the nearest site let T be the "beach line" let be the region covered by s p. 를 사이트 p와 Q 사이의 경계선으로 한다. S S을(를) 이 을 적용할 사이트의 집합으로 한다.let be the sites extracted from with minimal y-coordinate, ordered by x-coordinate let DeleteMin(X) be the act of removing the lowest and leftmost site of (sort by y unless they're identical, in which case sortby x) let be the Voronoi map of which is to be constructed by this algorithm create initial vertical boundary rays while not IsEmpty(Q) do p ← DeleteMin(Q) case p of p is a site in : find the occurrence of a region in T containing p, bracketed by on the left and on the right create new boundary rays and with bases p replace with in T delete from Q any intersection between and insert into Q any intersection between and insertinto Q any intersection between and p is a Voronoi vertex in : let p be the intersection of on the left and on the right let be the left neighbor of and let be the right neighbor of in T create a new boundary ray if , or create if p is right of the higher of q and s, otherwise create replace with newly created T에서 와 {\ 사이의 교차로 삭제 C 사이의 교차로 삭제 and insert into Q any intersection between and record p as the summit of and and the base of 경계 r{\ s{\ 엔드케이스 엔드를 출력하는 동시에 나머지 경계선을 T로 출력한다.
가중 사이트 및 디스크
으로서 포춘 ref.,[1]에 설명하는 스위프 라인 알고리즘을 수정한 버전은 각 사이트의 거리는 사이트의 무게에 의해서 상쇄된 추가적 가중 보로노이 다이어그램, 구축에 모두 동등하게 디스크에 걸친 보로노이 다이어그램, 반경 그 사이트들 의 무게와 맞먹위주로 보여질 수 있으며 사용될 수 있다. 앉다e
보로노이 도표를 사용하여 트리맵을 작성할 때 보로노이 셀의 영역을 제어하는 데 가중 사이트를 사용할 수 있다.가중치가 추가된 보로노이 다이어그램에서 사이트 간 이등분선은 일반적으로 하이퍼볼라로, 직선이 되는 디스크의 미가중 보로노이 다이어그램과 전력 다이어그램과는 대조적이다.
참조
- ^ a b de Berg, Mark; van Kreveld, Marc; Overmars, Mark; Schwarzkopf, Otfried (2000), Computational Geometry (2nd revised ed.), Springer-Verlag, ISBN 3-540-65620-0 섹션 7.2: 보로노이 다이어그램 계산: 페이지 151–160.
- ^ Austin, David, Voronoi Diagrams and a Day at the Beach, Feature Column, American Mathematical Society.
- ^ 스티븐 포춘.보로노이 다이어그램에 대한 스위플린 알고리즘.컴퓨터 기하학에 관한 제2회 연례 심포지엄의 진행.미국 뉴욕 요크타운 하이츠, 1986페이지 313–322.ISBN 0-89791-194-6ACM 디지털 라이브러리SpringerLink
- ^ Kenny Wong, Hausi A. Müller, An Efficient Implementation of Fortune's Plane-Sweep Algorithm for Voronoi Diagrams, CiteSeerX 10.1.1.83.5571.
