약 수행 비용. 스킵 쿼드 트리에서 가장 가까운 이웃 검색


10

참고 : 질문에 대한 답변이 다시 정리되었습니다. 이제 시간 에 가장 낮은 형제 조상을 찾을 수 있다고 가정하면 ANN을 실제로 에서 수행 할 수 있습니까?O ( 로그 n )O(1)O(logn)


쿼드 트리는 효율적인 공간 인덱스입니다. [2]에 설명 된 것처럼 압축 된 쿼드 트리 구조에서 가장 가까운 이웃 검색을 구현하는 퍼즐이 있습니다. (세부 사항없이 검색은 등거리 경로의 꼬리 노드에서 끝나는 소위 등거리 사각형을 따라 하향식으로 진행됩니다. 첨부 된 이미지에서 이것은 남동쪽에있는 점으로 채워진 노드 일 수 있습니다.)

알고리즘이 작동하려면 4 개 방향 (북쪽, 서쪽, 남쪽)에서 가장 낮은 (계층 구조에서 가장 가까운) 조상 노드에 대한 포인터를 각 노드 (두 개 이상의 비어 있지 않은 사분면이있는 사각형)마다 유지해야합니다. , 동쪽). 이것들은 노드의 서쪽 조상의 녹색 화살표로 표시됩니다 (화살표는 조상의 광장 중앙을 가리킴).

이 논문은 포인트 삽입 및 삭제 중에 O (1)에서 이러한 포인터를 업데이트 할 수 있다고 주장합니다. 그러나 녹색 점의 삽입을 볼 때 임의의 수의 포인터 (이 경우 6 개)를 업데이트해야합니다.

이 포인터 업데이트를 일정한 시간에 수행하는 트릭을 원합니다. 어쩌면 악용 될 수있는 간접적 인 형태가 있을까요?

점 삽입 전 (왼쪽) 및 후 (오른쪽) 쿼드 트리

편집하다:

논문의 관련 섹션은 6.3이며 다음과 같이 읽습니다. "경로가 구부러진 경우 가장 낮은 조상 이외에도 방향 각각에 대해 가장 낮은 방향을 고려해야합니다 그 방향으로가는 조상 [...] 에서이 제곱을 찾는 것은 우리 가 각 방향에 가장 가까운 조상을 가리키는 각 정사각형에 추가 포인터를 연결하면 제곱 당 시간 으로 수행 할 수 있습니다. 이러한 포인터는 점을 삽입하거나 삭제하는 동안 시간 안에 업데이트 될 수도 있습니다 . "q O ( 1 ) 2 d Q 0 O ( 1 )log(c/ε)2 d qq2dqqO(1)2dQ0O(1)

[2] : Eppstein, D. and Goodrich, MT 및 Sun, JZ,“스킵 쿼드 트리 : 다차원 데이터를위한 간단한 동적 데이터 구조”, 전산 기하학에 관한 제 21 회 연례 심포지움 진행, pp. 296-305 2005 년.


2
오랜 시간이 지났으므로 정확하게 기억하지 못하지만 오늘 아침 (arxiv 및 저널 버전 모두) 신문을 다시 읽을 때 필요한 포인터를 유지할 위치를 찾을 수 없었습니다. 부모-자식 포인터와 교차 샘플 포인터 만 유지한다고 생각했습니다. 아마도 당신이 말하는 것을 말하는 종이의 텍스트를 더 정확하게 가리킬 수있을 것입니다.
David Eppstein 2016 년

2
안녕 데이비드, 봐 주셔서 감사합니다. ANN 검색은 마지막 섹션입니다 (6). 문제는 그림에 표시되어 있습니다. 7이 (b) q가 왼쪽 하단 어딘가에 대략 위의 그림에서 그래프로 나타낸 것입니다. 섹션 6.3의 텍스트의 특정 부분을 포함하도록 질문을 편집했습니다. 나는 아마도 equistabbing의 정의로 완화 될 수있는 방법에 대한 아이디어를 가지고 있지만, 다른 계산이 목표 성능을 위반하지 않는다는 것을 확신 할 수 없다 ...
0__

2
좋아, 그것은 문제처럼 보인다. Goodrich와 논의하고 있습니다 (여기서 대부분의 세부 사항을 한 Sun과 연락이 끊겼습니다). 우리의 현재 느낌은 이러한 추가 포인터가 실제로 필요하지 않다는 것입니다 (우리는 대략적인 범위에는 필요하지 않습니다. 왜 이웃은 달라야하며 쿼리 알고리즘은 위에서 본 조상을 기억할 수 있어야합니다) 포인터를 사용하여 찾아 보지 말고 아래로 이동하십시오.) 자세한 내용을 확인하면 다시 연락 드리겠습니다.
David Eppstein 2016 년

2
감사합니다 문자 수와 레이아웃의 이유로, 나는 '직관적 인 아이디어'를 스케치하는 대답을 추가 할 것입니다. 아마도 시작점이 될 것입니다.
0__

답변:


11

다윗처럼, 요나단이 왜 2 ^ d 포인터에 대해 그 말을했는지 모르겠습니다. 필요하지 않습니다. 위에서 언급했듯이 Q_0에서 리프 v에 대한 포인트 위치를 수행 할 때 건너 뛰기 쿼드 트리에서 형제 노드 (및 해당 상자)를 기억하는 것으로 충분합니다. P에서 상자를 처리 할 때 쿼리 지점에 가장 가까운 리프 상자에 대한 위치를 지정하여 내려 가면서 형제 상자를 삽입합니다. 이것은 당신의 대답과 다소 같을 것 같습니다. 또한이 절차는 예를 들어 Arya, Sunil and Mount, David M. 및 Netanyahu, Nathan S. 및 Silverman, Ruth and Wu, Angela Y. JACM, 1998. "가까운 인접 이웃 검색 고정 치수를위한 최적의 알고리즘"


좋은 소식입니다! go-down-step 단계에서 형제 자매를 추가 할 경우 전체 최악의 비용 범위가 변경 될지 여부는 확실하지 않지만, 아니요라고 가정합니다. Arya et al.에 의해 논문을 살펴 보았지만, Quadtree 논문보다 접근성이 훨씬 적습니다. :)
0__

5
와! cstheory.SE에 오신 것을 환영합니다!
Hsien-Chih Chang 張顯 之

5

쿼드 트리 건너 뛰기를 z- 순서에 따라 포인트를 저장하는 데이터 구조의 건너 뛰기 목록 구현으로 생각할 수 있습니다. 적어도 개념적으로 더 간단합니다 ...

http://goo.gl/pLiEO의 2 장을 참조하십시오 .

일정 시간에 일부 기본 z 순서 연산을 수행 할 수 있다고 가정하면 ANN을 로그 시간으로 수행 할 수 있습니다. 앞에서 언급 한 장에서는 압축 쿼드 트리를 원할 경우 기괴한 작업을 피할 수있는 방법이 없음을 보여줍니다. LCA 작업은 필요하지 않습니다 ...


3
그렇습니다. 결정 론적 변형은 동일한 z 순서에 대해 2-3 개의 나무와 비슷합니다.
David Eppstein

링크 주셔서 감사합니다, 나는 당신의 논문을 전에 본 적이 있습니다. 어쨌든 주어진 알고리즘으로 한계를 경험적으로 확인할 수 없었습니다. 나는 정리 13의 라운드 수를 묶는 데 사용되는 Lemma 7에 대한 참조가 일정한 반경 가정하기 때문에 유효하지 않을 수 있다고 생각합니다. 반면 ANN의 검색 반경은 점진적으로 변경됩니다. 임계 사각형의 집합입니다. ? r
0__

검색 과정에서 반지름이 좁아집니다. 나는이 주장이 옳다고 낙관적이다.
Sariel Har

1

또한 직관적으로 그러한 포인터없이 살 수 있다고 생각하고 어느 시점에서 모든 노드를 하드 디스크에 유지해야하므로 포인터가 크게 줄어 듭니다.

내 생각은 대략 다음과 같습니다. 가장 좋은 후보 점 (리프) 외에도 각 라운드에서 최악의 거리 도 추적합니다 . 최악의 거리 는 가 정사각형 내부 또는 외부에 있더라도 노드 의 모든 모서리와 쿼리 지점 의 최대 거리입니다 . r m a x d i s t ( v , q ) q v vlbestrmaxdist(v,q)qvv

라운드는 다음과 같습니다. 가 비어 있으면 반환합니다 (있는 경우). 그렇지 않으면 삭제 분 현재 제공 에서 . 를 로 초기화하십시오 (또는 최상의 후보자가 아직없는 경우 이를 설정하십시오 ). 첫째, 각각의 비어 있지 않은 아이 테스트 에 . 이 자식 가 잎인 경우, 필요한 경우 및 업데이트하십시오 . 가 노드 인 경우 및 를 계산하십시오. 후자는 가장 좋은 거리입니다. 0이면L 개의 B 형 E S t의 P 0 Q 0 (R)의 m X의 L 개의 B 형 E S tP 0 Q 0 Q L 개의 B 형 E S t의 R의 m X의 Q를 D S t ' ( Q , V는 ) 거라고 I S t를 ( q , v ) v q q vPlbestp0Q0rmaxlbestp0Q0qlbestrmaxqdist(q,v)dist(q,v)v 는 안에 있거나 에서 까지 의 모든 모서리에서 가장 짧은 거리에 있습니다.qqv

경우 잊지 , 그렇지 않으면를 유지한다. 유지 된 노드 수가 경우 해당 노드를 푸시하십시오 . 라운드의 끝. q 2 Pdist(q,v)>rmaxq2P

그렇지 않으면 원래 검색과 유사하게 진행하십시오. 가능한 가장 높은 에서 해당 노드를 에 대응하는 찾아서 시작하십시오. 즉, 최고의 거리가 초과하는 것을 건너 뜁니다 . 이 검사 후에 아이가 남아 있다면, 그 아이로 내려 가서 반복하십시오. 자녀가 남아 있지 않으면 로 이동하여 반복하십시오. 테스트가 에서 수행 된 경우 라운드가 완료됩니다.p 0 Q j r m a x Q j 1 Q 0qp0QjrmaxQj1Q0

현재로서는 가능한 모든 경우에 가장 가까운 이웃을 찾거나 원래 알고리즘만큼 성능이 우수하다는 것을 알지 못합니다. 또한 의 초기화 가 충분한 지 여부. 그리고 에서 우선 순위는 무엇 입니까? 여전히 최고의 거리입니까? PrmaxP


편집 (2013 년 4 월)

나는 이제 같은 노드로 내려 가면 현재 쿼리 모양이 적용되는 영역을 변경하지 않는 속성을 기반으로 equistabbing 노드 대신 'equipotent'노드의 정의를 사용하는 위 알고리즘에 대한 더 많은 실험을 수행했습니다. .rmax

불행히도, 성능이 라운드로 저하되는 병리학 적 사례를 만들 수 있습니다 (아래 이미지 참조; 쿼리 포인트는 하단 중앙) .O(n)

여기에 이미지 설명을 입력하십시오


0

나는 이론 13에 주장 된 최대 라운드 수를 확인하기 위해 가장 낮은 형제 조상들이 무차별 대입 (O (1) 변형을 찾기 전에)을 검색하는 equistabbing 기반 알고리즘을 구현했다. .O(ϵ1d(logn+logϵ1))

이전 답변의 "병리학 적"예를 사용하고 있습니다. 2 차원 근 사각의 측면 길이는 512이며 중심 좌표는 (256, 256)입니다. 좌표는 정수로 제공되며 냅니다. 점은 제곱을 가로 질러 수평으로 균등하게 배치되며 쿼리 지점 는 (256, 511)입니다 (512는 이미 제곱을 벗어납니다).vϵ=1v

아래 그림에는 풀 트리 이 표시되어 예제의 포인트 수는 16입니다. 파란색 사각형 외곽선은 우선 순위 대기열로 푸시 된 흥미로운 사각형을 나타내며 가운데 숫자는 라운드 숫자를 나타냅니다. 그들은 밀어 붙였다. 발견 된 리프 포인트는 또한 설명 된 라운드 번호로 레이블이 지정됩니다. 3 개의 투명한 파란색 원은 1, 2, 7 차 이후의 알려진 NN 반경을 나타냅니다 (가장 가까운 이웃은 7 차에서 처음으로 표시됨). 총 12 개의 라운드가 있습니다 (대기열의 마지막 6 개 팝 사각형 만 새 사각형을 추가하지는 않음).Q0

O(n)d=2ϵ=1O(logn)

따라서 중요한 것을 놓치지 않으면 알고리즘이 명시된 속도를 달성 할 수 없습니다. 의견이나 아이디어가 있습니까?

순회

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.