Koszty wykonania ok. szukaj najbliższego sąsiada w pomijanym quadtree

10

UWAGA : Pytanie zostało ponownie sformułowane w moich odpowiedziach: Zakładając, że możemy znaleźć najniższych przodków rodzeństwa w czasie , czy ANN można naprawdę wykonać w ?O(1)O(logn)


Czworoboki są wydajnymi wskaźnikami przestrzennymi. Mam łamigłówkę z implementacją wyszukiwania najbliższego sąsiada w skompresowanej strukturze quadtree, jak opisano w [2]. (Bez wchodzenia w szczegóły, wyszukiwanie odbywa się od góry do dołu wzdłuż tak zwanych równoodległych kwadratów, kończąc się na węźle ogonowym jednakowo odległej ścieżki. Na załączonym obrazie może to być dowolny z węzłów na południowym wschodzie wypełnionych punktami.)

Aby ich algorytm działał, należy zachować dla każdego węzła - kwadrat z co najmniej dwoma niepustymi kwadrantami - wskaźniki dla każdego najniższego (najbliższego w hierarchii) węzła przodka w każdym z czterech kierunków (północ, zachód, południe , wschód). Wskazują na to zielone strzałki dla zachodniego przodka węzłów (strzałka wskazuje środek kwadratu przodka).

Artykuł twierdzi, że wskaźniki te można aktualizować w O (1) podczas wstawiania i usuwania punktów. Jednak patrząc na wstawienie zielonego punktu, wydaje się, że muszę zaktualizować dowolną liczbę wskaźników, w tym przypadku sześć.

Mam nadzieję, że uda mi się zrobić aktualizację wskaźnika w stałym czasie. Może istnieje jakaś forma pośrednictwa, którą można wykorzystać?

poczwórne przed (po lewej) i po (po prawej) wstawieniu punktu

EDYTOWAĆ:

Odpowiednia część artykułu to 6.3, gdzie brzmi: „jeśli ścieżka ma zakręty, to oprócz najniższych przodków , powinniśmy również rozważyć dla każdego z kierunków najniższy przodek który zmierza w tym kierunku [...] Znalezienie tych kwadratów z można wykonać w czasie na kwadrat, jeśli skojarzymy dodatkowe wskaźników z każdym kwadratem w wskazując jego najbliższych przodków dla każdego kierunku Wskaźniki te można również aktualizować w czasie podczas wstawiania lub usuwania punktu. ”losol(do/ε)q2)reqqO(1)2)reQ0O(1)

[2]: Eppstein, D. i Goodrich, MT i Sun, JZ, „The Skip Quadtree: A Simple Dynamic Data Structure for Multidimensional Data”, w toku dwudziestego pierwszego dorocznego sympozjum na temat geometrii obliczeniowej, s. 296–305 , 2005.

0__
źródło
2
Minęło trochę czasu, więc nie pamiętam dokładnie, ale po ponownym przeczytaniu gazety dziś rano (zarówno w wersji ARXIV, jak i w dzienniku) nie mogłem znaleźć, gdzie jest napisane, że zachowujemy wskazówki, które według ciebie są potrzebne. Myślałem, że trzymamy tylko wskaźniki rodzic-dziecko i wskaźniki między próbkami. Może więc możesz wskazać bardziej precyzyjnie na tekst w dokumencie, który mówi, co mówisz.
David Eppstein
2
Cześć David, dziękuję za spojrzenie. Wyszukiwanie ANN jest ostatnią sekcją (6). Problem wskazano na rys. 7 (b), co z grubsza przedstawiłem na powyższej ilustracji, jeśli q jest gdzieś w lewym dolnym rogu. Zredagowałem pytanie, aby uwzględnić konkretną część tekstu z sekcji 6.3. Mam kilka pomysłów na to, jak mógłbym być zrelaksowany przy definicji ekwipunku, ale nie jestem pewien, czy mogę udowodnić, że jakiekolwiek alternatywne liczenie nie narusza ukierunkowanego działania ...
0__
2
Ok, to wygląda na problem. Rozmawiam o tym z Goodrichem (straciliśmy kontakt z Sunem, który wykonał większość szczegółów tutaj). Nasze obecne odczucie jest takie, że tak naprawdę nie powinniśmy potrzebować tych dodatkowych wskaźników (nie potrzebujemy ich dla przybliżonych zakresów, dlaczego przybliżeni sąsiedzi powinni być inni, i algorytm zapytania powinien mieć możliwość zapamiętania przodków, których widział na w dół zamiast używać wskaźników do ich wyszukiwania), ale skontaktujemy się z Tobą, gdy będziemy nieco bardziej pewni szczegółów tutaj.
David Eppstein
2
Świetnie Dziękuję Ci bardzo. Ze względu na liczbę znaków i układ dodam odpowiedź, która naszkicuje mój „intuicyjny pomysł”, być może jest to punkt wyjścia.
0__

Odpowiedzi:

11

Podobnie jak David, nie wiem, dlaczego Jonathan umieścił tę uwagę na temat 2 wskaźników. Nie są potrzebne. Jak wspomniano powyżej David, podstawową właściwością jest to, że kiedy robimy lokalizację punktu do liścia v w Q_0, wystarczy zapamiętać węzły rodzeństwa (i ich pola) w poczwórnym drzewie pomijanym. Kiedy przetwarzamy pudełko z P, robimy lokalizację punktu dla pudełka z liśćmi najbliższego naszemu punktowi zapytania, wstawiając pudełka rodzeństwa, gdy schodzimy w dół. Wygląda na to, że to mniej więcej to samo, co twoja odpowiedź. Ponadto procedura ta jest bardzo podobna, na przykład w odniesieniu do przybliżonej lokalizacji punktu w poniższej pracy: Arya, Sunil and Mount, David M. i Netanyahu, Nathan S. i Silverman, Ruth i Wu, Angela Y., „Optymalny algorytm do wyszukiwania przybliżonych wymiarów najbliższego sąsiada”, JACM, 1998. Rzeczywiście,

Michael Goodrich
źródło
To dobra wiadomość! Po prostu nie byłem pewien, czy dodanie rodzeństwa podczas schodzenia wpłynie na zmianę ogólnego kosztu najgorszego przypadku, czy nie, ale przypuszczam, że nie. Przejrzałem artykuł autorstwa Aryi i wsp., Ale okazało się, że jest on znacznie mniej dostępny niż artykuł Quadtree :)
0__
5
Łał! Witamy w cstheory.SE!
Hsien-Chih Chang 張顯 之
5

Można pomyśleć o pominięciu kwadratu jako implementacji listy pominięć struktury danych przechowującej punkty zgodnie z ich kolejnością. Jest (prawdopodobnie) co najmniej koncepcyjnie prostsze ...

Zobacz rozdział 2 tutaj: http://goo.gl/pLiEO .

I tak, zakładając, że możesz wykonać kilka podstawowych operacji rzędu Z w stałym czasie, zdecydowanie możesz wykonać ANN w czasie logarytmicznym. Powyższy rozdział pokazuje również, że nie można uniknąć dziwnych operacji, jeśli chce się skompresowanych czterech drzew. Uwaga: operacja LCA nie jest konieczna ...

Sariel Har-Peled
źródło
3
Tak, a warianty deterministyczne przypominają 2-3 drzewa dla tej samej kolejności Z.
David Eppstein
Dzięki za link, rzeczywiście widziałem już twój artykuł. W każdym razie nie mogłem empirycznie zweryfikować powiązania z danym algorytmem. Mam wrażenie, że odniesienie do lematu 7, które jest używane do ograniczenia liczby rund w twierdzeniu 13, może być niepoprawne, ponieważ zakłada stały promień , podczas gdy promień wyszukiwania w ANN zmienia się przyrostowo, podobnie jak zestaw kwadratów krytycznych. ? r
0__
Określony promień zmniejsza się podczas procesu wyszukiwania. Jestem dość optymistyczny, argument jest poprawny.
Sariel Har-Peled,
1

Intuicyjnie też czuję, że można żyć bez tych wskaźników, a ponieważ muszę w pewnym momencie utrzymać wszystkie węzły na dysku twardym, wszelkie redukcje wskaźników są świetne.

lbmistrmzaxrejast(v,q)qvv

P.lbmistp0Q0rmzaxlbmistp0Q0qlbmistrmzaxqrejast(q,v)rejast(q,v)vqqv

rejast(q,v)>rmzaxq2)P.

qp0QjotrmzaxQjot-1Q0

rmzaxP.


EDYCJA (kwiecień 2013)

rmzax

O(n)

wprowadź opis zdjęcia tutaj

0__
źródło
0

O(ϵ1-re(logn+logϵ-1))

ϵ=1v

Q0

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

Tak więc, chyba że brakuje mi czegoś istotnego, algorytm nie może osiągnąć określonej prędkości. Wszelkie komentarze lub pomysły?

przejście

0__
źródło