Costi di esecuzione ca. ricerca del vicino più vicino in un quadrifoglio saltato


10

NOTA : la domanda è stata ribadita nelle mie risposte: supponendo ora che possiamo trovare gli antenati fratelli più bassi in tempo, l'ANN può davvero essere eseguita in O ( log n ) ?O(1)O(logn)


I quadrifici sono indici spaziali efficienti. Ho un enigma con l'implementazione di una ricerca del vicino più vicino in una struttura quadrata compressa come descritto in [2]. (Senza entrare nei dettagli, la ricerca sta andando dall'alto verso il basso lungo i cosiddetti quadrati equidistanti, che termina nel nodo di coda di un percorso equidistante. Nell'immagine allegata questo potrebbe essere uno qualsiasi dei nodi nel sud-est pieno di punti.)

Affinché il loro algoritmo funzioni, è necessario mantenere per ciascun nodo - un quadrato con almeno due quadranti non vuoti - puntatori per ciascun nodo antenato più basso (più vicino nella gerarchia) in ciascuna delle quattro direzioni (nord, ovest, sud , est). Questi sono indicati dalle frecce verdi per l'antenato verso ovest dei nodi (la freccia punta al centro della piazza degli antenati).

L'articolo afferma che questi puntatori possono essere aggiornati in O (1) durante l'inserimento e l'eliminazione di punti. Tuttavia, quando si osserva l'inserimento del punto verde, sembra che sia necessario aggiornare qualsiasi numero arbitrario di puntatori, in questo caso sei.

Spero in un trucco per fare questo aggiornamento del puntatore in tempo costante. Forse esiste una forma di riferimento indiretto che può essere sfruttata?

quadtree prima (a sinistra) e dopo (a destra) l'inserimento del punto

MODIFICARE:

La relativa sezione della carta è 6,3, dove si legge: "se il percorso ha curve, quindi oltre al antenati bassi di q , dovremmo anche considerare per ciascuno dei 2 d indicazioni the antenato più basso di q che va in quella direzione [...] Trovare questi quadrati da q può essere fatto in O ( 1 ) tempo per quadrato se associamo ulteriori 2 d puntatori a ciascun quadrato in Q 0log(c/ε)q2dqqO(1)2dQ0indicando i suoi antenati più vicini per ogni direzione. Questi puntatori possono anche essere aggiornati in tempo durante l'inserimento o l'eliminazione di un punto. "O(1)

[2]: Eppstein, D. e Goodrich, MT e Sun, JZ, "The Skip Quadtree: una struttura dati dinamica semplice per dati multidimensionali", in Atti del ventunesimo simposio annuale sulla geometria computazionale, pagg. 296—305 , 2005.


2
È passato un po 'di tempo, quindi non ricordo con precisione, ma stamattina ho riletto il giornale (sia la versione arxiv che quella del diario). Pensavo che avessimo solo puntatori genitore-figlio e puntatori tra campioni. Quindi forse potresti indicare più precisamente il testo nel documento che dice quello che dici che fa.
David Eppstein,

2
Ciao David, grazie per dare un'occhiata. La ricerca ANN è l'ultima sezione (6). Il problema è indicato in fig. 7 (b) che è approssimativamente quello che ho rappresentato nell'illustrazione sopra, se q è da qualche parte in basso a sinistra. Ho modificato la domanda per includere la parte specifica del testo dalla sezione 6.3. Ho alcune idee su come potrei essere rilassato con la definizione di equistabbing forse, ma non sono sicuro di poter provare che qualsiasi conteggio alternativo non viola la prestazione mirata ...
0__

2
Ok, sembra un problema. Ne sto discutendo con Goodrich (abbiamo perso il contatto con Sun, che ha fatto la maggior parte dei dettagli qui). La nostra attuale sensazione è che in realtà non dovremmo aver bisogno di questi puntatori extra (non ne abbiamo bisogno per intervalli approssimativi, perché i vicini vicini dovrebbero essere diversi e dovrebbe essere possibile che l'algoritmo di query ricordi gli antenati che ha visto sul più in basso piuttosto che usare i puntatori per cercarli) ma ti risponderemo quando saremo un po 'più sicuri dei dettagli qui.
David Eppstein,

2
Ottimo, grazie mille. Per motivi di conteggio dei personaggi e layout, aggiungerò una risposta che delinea la mia "idea intuitiva", forse è un punto di partenza.
0__

Risposte:


11

Come David, non so perché Jonathan abbia fatto quell'osservazione sui 2 ° d puntatori. Non sono necessari. Come ha detto David sopra, la proprietà essenziale è che quando stiamo eseguendo una posizione di punto su una foglia v in Q_0, è sufficiente ricordare i nodi fratelli (e le loro caselle) nel quadratino salta. Quando elaboriamo una casella da P, facciamo una posizione del punto per la casella foglia più vicina al nostro punto di query, inserendo le caselle di pari livello mentre scendiamo. Sembra che questo sarebbe più o meno lo stesso della tua risposta. Inoltre, questa procedura è molto simile, ad esempio, a come viene eseguita la posizione approssimativa del punto nel seguente documento: Arya, Sunil and Mount, David M. e Netanyahu, Nathan S. e Silverman, Ruth e Wu, Angela Y., "Un algoritmo ottimale per il vicino più prossimo approssimativo che cerca dimensioni fisse", JACM, 1998. In effetti,


Questa è una buona notizia! Non ero sicuro che l'aggiunta dei fratelli durante la fase discendente avrebbe cambiato il limite del costo complessivo del caso peggiore o no, ma suppongo di no. Avevo esaminato il documento di Arya et al., Ma l'ho trovato molto meno accessibile del tuo documento
Quadtree

5
Wow! Benvenuti in cstheory.SE!
Hsien-Chih Chang 張顯 之

5

Si può pensare a saltare quadtree come un'implementazione skip-list di una struttura di dati che memorizza i punti secondo il loro ordine z. È (probabilmente) almeno concettualmente più semplice ...

Vedi il capitolo 2 qui: http://goo.gl/pLiEO .

E sì, supponendo che tu possa eseguire alcune operazioni di base di ordine z in tempo costante, puoi sicuramente fare ANN in tempo logaritmico. Il capitolo sopra menzionato mostra anche che non c'è modo di evitare operazioni bizzarre se si vogliono quadrifici compressi. Si noti che l'operazione LCA non è necessaria ...


3
Sì, e le varianti deterministiche sono molto simili a 2-3 alberi per lo stesso ordine z.
David Eppstein,

r

Il raggio definito si restringe durante il processo di ricerca. Sono ragionevolmente ottimista, l'argomento è corretto.
Sariel Har-Peled,

1

Sento anche intuitivamente che si potrebbe vivere senza quei puntatori, e dato che ho bisogno di perseverare tutti i nodi sul disco fisso ad un certo punto, qualsiasi riduzione dei puntatori è grande.

lbestrmaxdist(v,q)qvv

Plbestp0Q0rmaxlbestp0Q0qlbestrmaxqdist(q,v)dist(q,v)vqqv

dist(q,v)>rmaxq2P

qp0QjrmaxQj1Q0

rmaxP


EDIT (aprile 2013)

rmax

O(n)

inserisci qui la descrizione dell'immagine


0

O(ϵ1d(logn+logϵ1))

ϵ=1v

Q0

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

Quindi, a meno che non mi manchi qualcosa di cruciale, l'algoritmo non può raggiungere la velocità dichiarata. Hai commenti o idee?

traversal

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.