Perché binario alberi di ricerca?

voti
6

Stavo leggendo albero binario di ricerca e pensavo che il motivo per cui abbiamo bisogno di BST a tutti? Tutte le cose che per quanto ne so possono essere anche raggiungere utilizzando semplici matrici ordinate. Per esempio - Per costruire un BST avente n elementi, si impone n*O(log n)tempo cioè O(nlog n)e tempo di ricerca è O(log n). Ma questa cosa può anche essere raggiungere con un array. Possiamo avere un array ordinato (richiede O(nlog n)tempo), e il tempo di ricerca in che è anche O(log n)vale a dire la ricerca binaria algo. Allora perché abbiamo bisogno di un'altra struttura di dati a tutti? Ci sono ogni altro uso / applicazione di BST che li rendono così speciale?

--Ravi

È pubblicato 14/10/2010 alle 16:28
fonte dall'utente
In altre lingue...                            


4 risposte

voti
4

Che ne dite di tempo di inserimento ordinato?

Risposto il 14/10/2010 a 16:30
fonte dall'utente

voti
1

In programmazione grafica se si è esteso oggetto (vale a dire che rappresentano un intervallo in ogni dimensione e non solo un punto) è possibile aggiungerli al più piccolo livello di un albero binario (tipicamente un octree) dove si inseriscono in tutto.

E se non si pre-calcolare l'albero / SortedList la O (n) inserzione casuale in un elenco può essere proibitivo lento. il tempo di inserimento in un albero d'altra parte è solo O (log (n)).

Risposto il 14/10/2010 a 16:36
fonte dall'utente

voti
9

Gli array sono grandi se si sta parlando di write once, read molte volte tipo di interazioni. E 'quando si arriva a inserire, scambiando, e la cancellazione in cui BST davvero iniziare a brillare rispetto a un array. Dato che sono nodo riferiscono, piuttosto che sulla base di un blocco di memoria contiguo, il costo di spostamento di un elemento o nella raccolta o di raccolta è veloce, pur mantenendo la natura ordinata della collezione.

Pensate a come si farebbe la differenza di inserimento tra liste collegate contro gli array. Questa è una semplificazione eccessiva, ma mette in luce un aspetto del vantaggio che ho notato in precedenza.

Risposto il 14/10/2010 a 16:53
fonte dall'utente

voti
7

Immaginate di avere un array con un milione di elementi.

Si vuole inserire un elemento in posizione 5.

Quindi si inserisce alla fine della matrice e quindi ordinare.

Diciamo che l'array è pieno; questo è O (nlog n), che è 1.000.000 * 6 = 6.000.000 operazioni.

Immaginate di avere un albero bilanciato.

Questo è O (log n), oltre a un po 'per il bilanciamento = 6 + un po', lo chiamano 10 operazioni.

Quindi, hai appena speso 6.000.000 ops ordinamento l'array. È quindi desidera trovare quell'elemento. cosa fai? ricerca binaria - O (log n) - che è esattamente lo stesso di quello che stai andando a fare quando si esegue una ricerca nella struttura!

Ora immaginate che si desidera allocare elemento -another-.

Il vostro array è pieno! cosa fai? ri-allocare la matrice con n elementi extra e memcpy il lotto? si vuole veramente memcpy 4MBytes?

In un albero, si aggiunge solo un altro elemento ...

Risposto il 16/10/2010 a 10:14
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more