유클리드 거리를 기준으로 정렬


17

는 평면의 점 집합입니다. 임의의 점 x S 는 동일한 평면에 제공됩니다. 이 작업은 모든 y S x y 사이의 유클리드 거리로 정렬하는 것입니다.에스엑스에스와이에스엑스와이

두뇌없는 접근법은 모든 y S에 대해 y 사이의 거리를 계산 한 다음 빠른 알고리즘을 사용하여 정렬하는 것입니다.엑스와이와이에스

정렬 프로세스가 빨라지도록 를 저장하거나 전처리 하는 방법이 있습니까?에스


1
해시 테이블을 사용하여 해당 정사각형으로 적절한 크기 및 그룹 점으로 구성된 그리드를 고려할 수 있습니다. 그런 다음 특정 사각형 쌍에 대해 한 사각형의 모든 점이 다른 사각형의 모든 점보다 에서 더 먼 것으로 추론 할 수 있습니다 . 실제로 도움이 될 수 있습니다. x
ilyaraz

당신이 언급 한“뇌외 접근”은 O (n log n) 시간에 실행되는데, 여기서 n은 S의 포인트 수입니다. 실제로는 꽤 빠르다고 생각합니다. log n factor를 제거하겠습니까, 아니면 외부 정렬 과 같은 다른 것을 원 하십니까?
Tsuyoshi Ito

요점은 포인트 세트를 준비 할 시간이 거의 없다는 것입니다. 그러나 정렬 시간은 매우 제한적입니다. 즉, 표준 정렬 속도는 동일하지만 O (n log n)이지만 최악의 경우 (또는 최상의 경우 또는 기타) 더 빠릅니다.
Alex K.

예를 들어, S를 2 차원 트리로 저장하면 O (log n) 시간에 가장 가까운 이웃을 찾을 수 있습니다. 어쩌면 내 작업에 비슷한 솔루션이있을 수 있습니다. 나는 공간 데이터 구조에 대한 훌륭한 전문가가 아니며 많은 것들이 있으므로 쉽게 놓칠 수 있습니다.
Alex K.

답변:


13

해결 방법 1 : 한 쌍의 점 사이 에서 수직 이등분선을 찾아이 선들의 배열을 구성합니다. 배열은 Θ ( n 4 ) 셀을 가지며 , 정렬 순서는 일정하다. 따라서 배열을위한 점 위치 데이터 구조를 구축하고 해당 셀 내의 점에 대해 반환되는 정렬 된 순서로 각 셀을 장식하십시오. 인접한 셀 사이의 정렬 순서는 단일 조옮김에서만 다르므로 영구 데이터 구조를 사용하여 이러한 정렬 순서의 표현이 공간을 공유 할 수 있습니다. 총 공간은 O ( n 4 ) 이고 쿼리 시간은 O입니다.Θ(n2)Θ(n4)O(n4) .O(logn)

해결 방법 2 : 이 같은 수직 이등분선 의 의 무작위 표본을 선택하고 , 배열을 구성하고, 두 표본 선의 각 교차를 통해 각 배열 셀을 수직선 세그먼트로 분할합니다. 생성 된 구획은 Θ ( n 2 ) 셀을 가지며, 각각의 확률은 O ( n ) 샘플링되지 않은 이등분선에 의해 교차된다 . 셀 내의 일부 x에서 볼 때 포인트의 유효한 정렬 순서에 따라 파티션의 각 셀을 장식하십시오. 총 공간은 O ( n 3 ) 입니다.Θ(n)Θ(n2)O(n)O(n3)

이제 쿼리를 수행하려면 파티션에서 쿼리 지점을 찾고 파티션 셀과 함께 저장된 순서 를 찾은 다음이 저장된 순서로 시작하여 Levcopoulos & Petersson (1989) 의 데카르트 트리 비교 정렬 알고리즘을 사용하십시오 . 이 단계의 시간은 비례합니다. 여기서 k i 는 점 y i 와 순서가 다른 점의 수 입니다. 그러나 k iO ( n ) (각 샘플링되지 않은 이등분선은 최대 하나의 비 순차적 쌍 쌍을 야기 함)이므로 쿼리 시간iO(1+logki)kiyi케이나는영형() 또한 O ( N ) .나는영형(1+로그케이나는)영형()


1
PS 여기에 간단한 쿼리 알고리즘보다 복잡한 전처리 알고리즘 떨어져 같은 공간 및 쿼리 시간 만 거래를 사용하는 솔루션이의 또 다른 변형이다 : 11011110.livejournal.com/233793.html
데이빗 엡스타인

O ( n 2 log n ) 시간의 모든 n 시작점 에서 정렬하고 상수 조회를 위해 공간 O ( n 2 ) 를 사용하여 해시 테이블에 결과를 저장할 수있는 경우 왜 사전 처리를 수행합니까? n4nO(n2logn)O(n2)
Dave

정렬 순서가 다른 시작점 이 있기 때문에 Θ ( n 2 )가 아닙니다 . Θ(n4)Θ(n2)
David Eppstein

1

당신은 아마 당신이 그것을 슬라이스하는 방법으로 시간 에서 벗어날 수 없을 것입니다; 모든 가능한 정렬 순서에 해당하는 사전 계산 영역조차도 O ( n ! ) 영역을 생성 할 수 있으므로 의미있는 검색 기술로 '귀하의'영역을 찾는 데 O ( log ( n ! ) ) = O ( n log ( n ) ) 시간. ( 편집 :nlog(n)O(n!)O(log(n!))=O(nlog(n))이것은 절대적으로 잘못입니다. 한 번에 전체 분류가 필요하지 않습니다 특히 있지만 단지 무작위로 뽑아 수 있어야합니다 -!) 자세한 정보는 다른 한편으로는 복잡성 다운 받고 하나의 유용한 방법을 데이빗 엡스타인의 훌륭한 대답을 참조 TH-가까운 즉석에서 가장 가까운 이웃뿐만 아니라 두 번째 가장 가까운 곳까지 수용하는 표준 Voronoi 셀의 확장 인 고차 Voronoi 다이어그램을 통해 발생할 수 있습니다. k-nearest 이웃 검색에 대한 Frank Dehne의 논문, http : //people.scs .carleton.ca / ~ dehne / publications / 2-02.pdf 는 표준 참조 인 것 같습니다. 그의 홈페이지 ( http://www.dehne.carleton.ca/publications) 에는 보로 노이 다이어그램에 대한 다른 많은 논문들이 있습니다.k


3
하나 개의 파티션을 다른 정렬 순서와 지역에면하는 경우가 있습니다 없는 지역, O ( N ! ) . 영역 사이의 경계는 점 쌍의 수직 이등분선이며, 이러한 선 은 Θ ( n 2 ) 이며,이 선들의 배열에 의해 영역 세트가 제공됩니다. Θ(n4)O(n!)Θ(n2)
David Eppstein

@David 나는 이것이 당신이 대답해야한다고 생각합니다.
제임스 킹

두 번째-n! 내가 글을 쓰는 동안 잘못 느꼈지만 반대 사건을 볼 수 없었습니다. 나는 그것을 바로 잡기 위해 답을 곧 수정할 것이다. 그러나 나는 좀 더 직접적으로 정보를 얻고 싶다. 감사합니다!
Steven Stadnicki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.