Esempi concreti di utilizzo di alberi binari di ricerca?

voti
14

Capisco come binario alberi di ricerca sono implementati, ma non sono sicuro di quello che sono i vantaggi di utilizzare sopra le tabelle hash che la maggior parte dei linguaggi di programmazione hanno costruito nelle loro librerie standard.

Potrebbe qualcuno si prega di fornire esempi di problemi reali risolvibili con alberi binari di ricerca?

È pubblicato 16/02/2011 alle 00:44
fonte dall'utente
In altre lingue...                            


5 risposte

voti
1

Un esempio di cui è richiesto un albero binario è partizioni spaziali binari in computer grafica

http://en.wikipedia.org/wiki/Binary_space_partitioning

Un albero binario è necessaria perché l'algoritmo richiede la conservazione dei rapporti tra i nodi dell'albero binario. Ci sono molti altri algoritmi in cui la struttura dell'albero è importante, e così una tabella hash non è una struttura adeguata.

Un altro buon motivo per l'utilizzo di un albero binario invece di una tabella di hash è quando non si può facilmente generare un hash efficiente per gli elementi dei dati, ma è possibile generare una funzione di confronto.

Spesso per semplice memorizzare e recuperare dati una tabella hash è più ottimale, ma più complesso da implementare.

Risposto il 16/02/2011 a 00:53
fonte dall'utente

voti
0

Uno dei più trascurato è che molti file system usano alberi binari per gestire elenchi di directory. Essi usano raramente un albero binario semplice, ma qualche variazione, ad esempio un B-tree. Questo perché la domanda di archiviazione su disco dell'albero è molto importante per i dettagli di implementazione. Il motivo per cui utilizzano questo tipo di struttura è per efficienza e velocità. Questo permette loro di fare le cose come migliaia di supporto di file in una directory. I confronti per la creazione di file e tempi di cancellazione evidenziano l'efficienza di questo aspetto del file system.

alberi binari vengono utilizzati anche su molti giochi che rendono gli oggetti 3D. Anche in questo caso, il motivo è la velocità. In realtà, la velocità è così importante che alcuni motori di gioco, come il motore Quake hanno effettivamente l'albero binario pre-generata e pre-ottimizzato come parte del processo di generazione carta.

Risposto il 16/02/2011 a 00:56
fonte dall'utente

voti
0

Una cosa da notare è che Binary Search Albero sono efficiente dello spazio. Per esempio, si hanno 10 numeri interi per memorizzare e si dispone di una funzione di hash che mappa 0-99, poi u bisogno di una serie di 100 numeri interi. Se è stato utilizzato Binary Search Albero, allora si avrebbe solo allocare la quantità di memoria richiesta dal 10 elementi

Risposto il 16/02/2011 a 00:57
fonte dall'utente

voti
29

Ci sono alcuni vantaggi teorici di alberi binari di ricerca oltre tabelle hash:

  1. Essi conservano le loro elementi in modo ordinato . Ciò significa che se si desidera memorizzare il contenitore in un modo in cui si può facilmente visitare i valori in modo ordinato, un BST è probabilmente una scelta migliore di una tabella di hash. Ad esempio, se si desidera memorizzare una raccolta di studenti e poi stampare tutti gli studenti in ordine alfabetico, un BST è una scelta sostanzialmente migliore di una tabella di hash.

  2. Sostengono in modo efficiente le query gamma. Perché BST sono memorizzati in modo ordinato, è facile rispondere a domande del tipo "quali valori sono nel range [x, y]?" in un albero binario di ricerca. Per fare questo, si fa una ricerca nella struttura per il più piccolo elemento maggiore di x e il più grande elemento più piccolo di y, poi iterare gli elementi del albero tra di loro. Entrambe queste query eseguite a O (lg n) in un albero bilanciato, in modo che il tempo totale per questa operazione è O (lg n + k), dove k è il numero di elementi corrispondenti alla ricerca.

  3. Sostengono in modo efficiente le query primi vicini. Le tabelle hash sono specificamente progettati in modo che producono anche un po 'diverso molto diversi codici hash. Questo dà i valori di hash la dispersione di cui hanno bisogno per evitare di clustering troppi elementi in un punto. Tuttavia, ciò significa anche che è necessario fare una scansione lineare sopra la tabella hash per trovare elementi che potrebbero essere "vicino" a quello che stai cercando. Con un BST, è possibile in modo efficiente trovare il predecessore e successore di qualsiasi valore che desideri, anche se non è nella struttura.

  4. Essi possono avere migliori peggiori e minuscole garanzie. La maggior parte delle implementazioni di tabella hash hanno una sorta di caso degenere in cui un'operazione può degradare a O (n) nel caso peggiore. Una tabella hash scansione lineare o una tabella hash incatenato possono, con un cattivo insieme di elementi, richiedono O (n) per ricerca o richiedere O (n) su un rimaneggiamento. Inserimento in alcuni tipi di BST equilibrati, come / alberi rossi neri, alberi AVL, o alberi AA, è sempre nel caso peggiore O (lg n).

Se siete disposti a generalizzare i BST a strutture ad albero più elaborate, poi ci sono molte applicazioni in cui un albero può essere utilizzata per risolvere i problemi in modo più efficiente che in una tabella hash. Ecco alcuni esempi:

  1. kd-alberi consentono di memorizzare dati multidimensionali pur sostenendo query gamma veloci nello spazio multidimensionale, così come efficienti le ricerche primi vicini. È possibile utilizzarli per la classificazione (algoritmi di apprendimento pigro) o la geometria computazionale.

  2. Alberi Link / tagliati possono essere utilizzati per risolvere i problemi di massimo flusso molto più efficiente rispetto maggior parte degli algoritmi convenzionali permetterebbero. Buona spinta / rietichettatura algoritmi utilizzano questo per accelerare le loro implementazioni.

  3. Foreste disgiunti-set possono essere utilizzati per mantenere partizioni di elementi come asintoticamente efficiente possibile (α ammortizzato (n) per aggiornamento, dove α (n) è la funzione inversa Ackermann). Sono utilizzati in molti algoritmi di alberi veloci minimi-spanning, così come alcuni algoritmi di massima corrispondenti.

  4. Cumuli binari possono essere utilizzati per implementare in modo efficiente code di priorità. Più alberi complessi possono essere utilizzati per costruire cumuli binomiali e cumuli di Fibonacci , che sono di grande importanza in informatica teorica.

  5. Alberi di decisione possono essere utilizzati in apprendimento automatico per la classificazione, e come modello in informatica teorica per dimostrare limiti sui tempi di esecuzione dei vari algoritmi.

  6. Ternari alberi di ricerca sono un'alternativa ai tentativi che si basano su BST come leggermente modificata. Essi consentono di ricerca molto veloce e inserimento di elementi e per i set di dati sparsi sono abbastanza conciso.

  7. B-alberi sono utilizzati da molti sistemi di database per cercare in modo efficiente su elementi in cui l'accesso al disco è un fattore limitante.

  8. Alberi binari di spazio di partizionamento sono una generalizzazione di kd-alberi che può essere utilizzato per rendere rapidamente computer grafica (sono stati utilizzati per ottimizzare il rendering nel gioco originale Doom) e fare di collisione-rilevamento.

  9. BK-alberi consentono di determinare rapidamente tutte le parole che si trovano entro una certa distanza di modifica di qualche altra parola, e più in generale per trovare tutti i punti in uno spazio metrico entro una certa distanza di qualche altro punto.

  10. Alberi di fusione sono un'alternativa alle tabelle di chiavi intere che hanno un supporto estremamente veloce per le ricerche, inserzioni e delezioni.

  11. van Emde Boas alberi un'altra alternativa alle tabelle di chiavi intere che supportano ricerca, inserimento, cancellazione, successore e predecessore in O (lg lg n) per elemento. Alcuni sistemi di database utilizzano alberi VEB per ottimizzare le prestazioni.

Io non sono sicuro di come in argomento questa risposta è, ma dovrebbe dare un senso di come meravigliosi e BST potenti e più in generale strutture ad albero possono essere.

Risposto il 16/02/2011 a 01:05
fonte dall'utente

voti
0

Questo dovrebbe probabilmente essere un commento, ma auto-bilanciamento BST (s) (log (n)) sono ampiamente utilizzati, piuttosto che i BST. BST strisciamento hanno nel caso peggiore O (N) tempo di inserimento / rimozione.

Risposto il 16/02/2011 a 03:14
fonte dall'utente

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