Perché mai si dovrebbe usare un Octree su un albero KD?


32

Ho una certa esperienza nell'informatica scientifica e ho ampiamente utilizzato kd-tree per applicazioni BSP (binary space partitioning). Recentemente ho acquisito maggiore familiarità con gli octrees, una struttura di dati simile per il partizionamento degli spazi euclidei 3D, ma uno che funziona a intervalli regolari fissi, da ciò che raccolgo.

Un po 'di ricerca sull'indipendenza sembra indicare che gli alberi kd sono in genere superiori nelle prestazioni per la maggior parte dei set di dati: più veloci da costruire e da interrogare. La mia domanda è: quali sono i vantaggi degli ocre nelle prestazioni spaziali / temporali o altro, e in quali situazioni sono più applicabili (ho sentito la programmazione grafica 3D)? Un riassunto dei vantaggi e dei problemi di entrambi i tipi mi piacerebbe molto.

Inoltre, se qualcuno potesse approfondire l'utilizzo della struttura dei dati R-tree e i suoi vantaggi, sarei grato anche per quello. Gli alberi R (più degli ocre) sembrano essere applicati in modo abbastanza simile agli alberi kd per le ricerche k-vicino-vicino o intervallo.


Dovrei notare che sia gli alberi kd che gli alberi R (ma non gli octrees) sembrano specificamente progettati per facilitare le ricerche del vicino k più vicino - come si confrontano in questo senso?
Noldorin,

Una nota è che gli alberi kd hanno una profondità ridotta. I quad alberi compressi possono portarti lì, ma sono meno convenienti.
Suresh Venkat,

@Suresh Venkat: Grazie per quello. Non ho familiarità con i quadrifici compressi, ma sarebbero davvero adatti per le ripetizioni spaziali 3D? Forse esiste un analogo "octree compresso".
Noldorin,

Ho anche sentito che gli ocre sono più appropriati quando si ha una curva nota di ordine Z (riempimento di spazio), ma non sono del tutto sicuro del ragionamento qui.
Noldorin,

Risposte:


23

Le celle di una -tree possono avere alto aspect ratio, mentre le cellule octree sono garantiti per essere cubica. Dato che si tratta di una teoria, ti fornirò la ragione teorica per cui un elevato rapporto di aspetto è un problema: rende impossibile usare i limiti di volume per controllare il numero di celle che devi esaminare quando risolvi le domande approssimative vicine più vicine.kD

ϵqdd(1+ϵ)d1/ϵd1kD

kD


4
Vedi il recente libro di testo di Sariel Har-Peled per un moderno riassunto dei quadrifici compressi.
Jeffε

Grazie per un buon riassunto quantitativo, David. Solo per confermare: l'uso del "formato" è sinonimo di "rapporto di ramificazione"? Dovrò sicuramente controllare saltando quadre / octrees e forse anche compressi quadricre / octrees.
Noldorin,

1
Le proporzioni di una scatola rettangolare possono essere definite come il rapporto tra la lunghezza del bordo più lunga e la lunghezza del bordo più corta. Non so che cosa dovrebbe significare il rapporto di ramificazione in questo contesto, ma le proporzioni non sono correlate al fattore di ramificazione degli alberi (che è costante per entrambe le strutture di dati).
David Eppstein,

Mi mancavano le "celle in". Ha senso ora.
Noldorin,

15

Un gruppo di amici e io stiamo lavorando a un gioco Space-RTS come un divertente progetto laterale. Stiamo usando molte delle cose che abbiamo imparato in Informatica per renderlo altamente efficiente, permettendoci di creare eserciti enormi in seguito.

A tale scopo abbiamo preso in considerazione l'utilizzo di kd-trees, ma li abbiamo rapidamente respinti: inserimenti ed eliminazioni sono estremamente comuni nel nostro programma (si consideri una nave che vola attraverso lo spazio), e questo è un disgraziato pasticcio con kd-trees. Abbiamo quindi scelto octrees per il nostro gioco.


Ah sì, l'ho già sentito prima. L'inserimento / cancellazione con kd-trees è un'operazione costosa (a causa del riequilibrio). Credo che le complessità temporali nel migliore dei casi siano comunque le stesse ...
Noldorin,

2
Dipende da come procedi per riparare kd-tree. Una buona complessità temporale nel migliore dei casi non è qualcosa a cui generalmente mi rivolgo: ad esempio bogosort ha una complessità O (1) nel migliore dei casi, ma spero che nessuno lo usi.
Alex ten Brink,

Sfortunatamente non riesco a trovare buoni riassunti delle complessità temporali per operazioni comuni su queste strutture di dati, ma non mi dispiace. La complessità del tempo medio è spesso penetrante ...
Noldorin,

1
Penso davvero che faresti ancora meglio se usassi un albero KD che cicla gli assi e dividi semplicemente lo spazio nel mezzo. Salta l'enorme SAH e altri costosi tagli mediani e finirai con qualcosa che non solo cerca più velocemente di un octree, ma costruisce anche più velocemente. Dato che stai partizionando lo spazio uniformemente come faresti con un octree, ma con un albero binario piuttosto che un albero di 8 alberi, qualsiasi cosa tu stia facendo prima per le rimozioni non dovrebbe essere più complessa con l'albero KD, in quanto sarà distribuito uniformemente in modo simile. Es: potresti semplicemente rimuovere i nodi vuoti oltre una profondità di N.
Dragon Energy

8

quali sono i vantaggi degli ocre nelle prestazioni spaziali / temporali o altro, e in quali situazioni sono più applicabili (ho sentito la programmazione grafica 3D)?

Gli alberi kD sono alberi binari bilanciati e ocre sono tentativi, quindi i vantaggi e gli svantaggi sono probabilmente ereditati da quelle strutture di dati più generali. In particolare:

  • Il riequilibrio può essere costoso (gli octrei non necessitano di ribilanciamento).
  • Il bilanciamento gestisce meglio l'eterogeneità perché è adattivo.
  • Un fattore di ramificazione più elevato in ocre significa alberi meno profondi (meno indirette e allocazioni) per distribuzioni omogenee.

Inoltre, la bisection (come in octrees) si presta a una banale implementazione in termini di bit-twiddling. Allo stesso modo, immagino che gli octrees possano trarre grandi benefici dalle distanze pre-calcolate quando si effettuano ricerche di distanza.

MODIFICARE

Apparentemente i miei riferimenti a tentativi e omogeneità necessitano di chiarimenti.

I tentativi sono una famiglia di strutture di dati rappresentate da alberi di dizionari e vengono utilizzati come dizionari per chiavi che sono sequenze (in particolare stringhe ma anche sequenze di DNA e bit in un valore di hash per i tentativi di hash). Se ciascun dizionario mappa un bit di ciascuna delle coordinate x, ye z (bit più significativo nel primo livello del trie, successivo bit significativo nel secondo livello ecc.), Allora il trie è un ottetto che suddivide uniformemente lo spazio 3D. Quindi gli ocre ereditano le caratteristiche dei tentativi che sono, in generale:

  • Un alto fattore di ramificazione può significare alberi poco profondi che comportano poche direttezze quindi la ricerca è veloce, ad esempio 20 livelli di albero binario possono essere memorizzati in 4 livelli di un albero con un fattore di ramificazione di 256.
  • I tentativi non vengono riequilibrati durante gli inserimenti e le eliminazioni, risparmiando un'operazione costosa richiesta per alberi binari bilanciati.

Lo svantaggio è che l'eterogeneità può comportare tentativi / octe squilibrati, quindi le ricerche possono richiedere molte indicazioni indirette. Il problema equivalente nei tentativi è risolto utilizzando la compressione dei bordi per comprimere più livelli di indiretta in un unico livello. Octrees non lo fa, ma non c'è nulla che ti impedisca di comprimere un octree (ma non credo che potresti chiamare il risultato un octree!).

Per un confronto, prendere in considerazione un dizionario specializzato per le chiavi di stringa che viene rappresentato come un trie. Il primo livello del trie si ramifica sul primo carattere della chiave. Il secondo livello sul secondo personaggio e così via. È possibile cercare qualsiasi stringa cercando il primo carattere dalla chiave nel dizionario per ottenere un secondo dizionario utilizzato per cercare il secondo carattere dalla chiave e così via. Un insieme di stringhe di chiavi casuali sarebbe una distribuzione omogenea . Un insieme di stringhe chiave che condividono tutti un prefisso (ad esempio tutte le parole che iniziano con "anti") sono eterogeneidistribuzione. In quest'ultimo caso, il primo dizionario contiene solo un binding, per "a", il secondo solo per "n" e così via. Cercare qualsiasi mappatura nel trie sempre cercando gli stessi quattro dizionari con gli stessi quattro tasti. Questo è inefficiente ed è ciò che fanno gli ocre se, ad esempio, vengono utilizzati per immagazzinare distribuzioni di particelle eterogenee in cui la stragrande maggioranza delle particelle si trova in un piccolo volume all'interno dello spazio vettoriale.


"octrees are try"? Inoltre, cosa intendi con "gestisce meglio l'eterogeneità"? Omogeneo non è una parola che ho incontrato rispetto agli alberi.
Noldorin,

2
"Gli otttre non hanno bisogno di un riequilibrio"? Questo non è assolutamente vero per gli ottici che memorizzano distribuzioni di punti eterogenei. In alternativa, a seconda di come generalmente si definisce "octtree": riequilibrare un octtree è semplicemente impossibile , non importa quanto sia desiderabile.
Jeffε

@Noldorin "octrees are try". Sì. Sai cos'è un trie? en.wikipedia.org/wiki/Trie
Jon Harrop,

@Noldorin "Omogeneo non è una parola che ho incontrato rispetto agli alberi". Mi riferisco all'omogeneità della distribuzione che viene partizionata. Ad esempio, quando si partizionano particelle in uno spazio 3D, gli atomi in un solido sono distribuiti in modo omogeneo mentre le stelle nell'universo sono distribuite in modo eterogeneo. Gli alberi kD hanno maggiori probabilità di essere preferibili per distribuzioni eterogenee perché la loro suddivisione dello spazio è adattiva.
Jon Harrop,

@ Jɛ ff E "Riequilibrare un octtree è semplicemente impossibile". Questo è esattamente ciò a cui mi riferivo. Mi scuso se la mia formulazione era confusa.
Jon Harrop,

2

Gli octre sono utili come tipo di dati di base per i modelli continuum, vedere ad esempio il solutore di flusso Gerris . La vita è abbastanza difficile nella fluidodinamica, quindi sapere che le dimensioni di tutti i tuoi sottocubi dipende solo dalla loro profondità deve essere un fattore di semplificazione.

Avvertenza: non sono un fluidista dinamico!


Interessante. Posso sicuramente apprezzare il fatto che gli ocre sono più semplici da lavorare nei modelli continuum ... Mi chiedo quale sia il motivo della programmazione grafica?
Noldorin,
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.