2012-06-08 2 views
1

다음 작업을 수행 할 것입니다 알고리즘을 마련하기 위해 노력하고있어 : 질의 지점으로 함께 (가장 큰 원을, 점의 집합이 주어지면빈 원 쿼리 알고리즘

를 질의 지점을 찾을 수 그것의 센터) 집합에서 포인트를 포함하지 않습니다.

지금까지 보로 노이 다이어그램을 사용하여 집합의 사이트 지점에 가장 가까운 점을 포함하는 영역 (셀)을 찾은 다음 보로 노이의 가장자리 목록을 사용하여 사다리꼴 분해를 구성하는 방법을 생각했습니다. 분해에서 쿼리 포인트가 놓이는 셀을 찾은 다음 원의 반지름이 쿼리 포인트에서 해당 셀의 지점 (사이트)까지의 거리가됩니다. Voronoi는 O (n) 저장 장치가 필요하고 Voronoi에서 사다리꼴 분해를 생성하는 것은 O (n) 저장 장치로 수행 될 수 있기 때문에 이와 같은 것을 생성하는 데 필요한 저장소는 선형이라고 생각합니다.

* 편집 : 검색어 시간은 O (logn) 여야합니다. 즉, 한 번에 한 집합의 모든 점을 반복 할 수 없습니다.

소리가 맞지 않습니까? 아니면 여기에 뭔가 빠졌습니까?

또한이 알고리즘과 관련된 일부 참조 사항이 있으면 알려 주시기 바랍니다. 감사합니다 :)

+1

"쿼리 포인트를 중심으로하는 가장 큰 원 (세트의 어떤 점도 포함하지 않음)에 포함됩니다." 어떤 점 (엡실론)과의 거리가 가장 먼 원입니다. –

+1

여기서는 매우 밀도가있을 수 있지만 쿼리 포인트에서 다른 모든 쿼리까지의 거리를 계산하고 가장 가까운 것을 찾습니다. 그 가장 가까운 것이 당신에게 원의 반경을 알려줍니다. O (n) 복잡성, O (1) 저장. 네? –

답변

0

그것은 지나치게 복잡한 소리. Voroni 다이어그램이 무엇인지는 모르겠지만, 여러분의 포인트가 모두 2D 평면에 있다고 가정하면 (이것은 구체가 아닌 원을 언급 한 이후로 생각됩니다) 이것은 매우 사소한 것입니다 :

전체 반복 포인트를 찾아서 쿼리 포인트에 가장 가까운 포인트를 찾습니다. 이 거리는 피타고라스의 정리 인 sqrt((point_x - query_x)^2 + (point_y - query_y)^2)입니다. 가장 작은 거리는 원의 반경입니다.

+2

+1 거리 계산의 N-1의 제곱근 부분을 생략하고 가장 작은 거리 계산을 수행 할 수도 있습니다. –

+0

나는 집합의 모든 점들을 반복하지 않음으로써 질의 시간을 낮게 유지하려고 노력하고있다. 제안 된 알고리즘을 사용함으로써 O (n) 대신 O (logn) 질의 시간을 얻었습니다. – touvlo2000

+0

@ ErnestFriedman-Hill 아주 좋은 지적 : – Paulpro