Perché è importante che un albero binario essere bilanciatoPerché è importante che un albero binario essere equilibrato?
risposta
Il saldo di un albero binario è regolata dalla proprietà denominata asimmetria. Se un albero è più inclinata e la complessità temporale per accedere a un elemento di una i binari aumenta albero. Dire un albero
1 /\ 2 3 \ \ 7 4 \ 5 \ 6
Quanto sopra è anche un albero binario, ma proprio distorta. Ha 7 elementi, quindi un albero binario ideale richiede O (log 7) = 3 ricerche. Ma nel caso peggiore devi andare a un livello più profondo = 4 ricerche. Quindi l'asimmetria qui è una costante 1. Ma considera se l'albero ha migliaia di nodi. In questo caso, l'asimmetria sarà ancora più considerevole. Quindi è importante mantenere l'albero binario bilanciato.
Ma ancora una volta l'asimmetria è l'argomento del dibattito poiché l'analisi probabilistica di un albero binario casuale mostra che la profondità media di un random binary tree with n elements is 4.3 log n. Quindi è davvero questione di bilanciamento rispetto all'asimmetria.
più Una cosa interessante, gli informatici hanno anche trovato un vantaggio nella asimmetria e ha proposto un datastructure distorta chiamato skew heap
Immaginate un albero che assomiglia a questo:
A
\
B
\
C
\
D
\
E
Questo è un albero binario valida, ma ora la maggior parte delle operazioni sono O (n) invece di O (lg n).
per garantire un tempo di log (n) di ricerca, è necessario dividere il numero totale di nodi di livello inferiore da 2 a ogni ramo. Ad esempio, se si dispone di un albero lineare, mai ramificazione dalla radice al nodo foglia, allora il tempo di ricerca sarà lineare come in una lista collegata.
Un albero estremamente sbilanciato, ad esempio un albero in cui tutti i nodi sono collegati a sinistra, significa che si continua a cercare in ogni singolo nodo prima di trovare l'ultimo, che non è affatto il punto di un albero e non ha alcun vantaggio su una lista collegata. Bilanciamento l'albero rende migliori tempi di ricerca O (log (n)) al contrario di O (n).
- 1. Differenza tra albero binario completo e albero binario bilanciato
- 2. Un albero binario contiene un altro albero?
- 3. Perché JSON è importante?
- 4. Che cos'è WebIDL e (perché) è importante?
- 5. Un albero non binario può essere percorso in ordine?
- 6. Programmazione genetica ad albero binario
- 7. stampa confine albero binario
- 8. Albero binario dall'albero generale
- 9. albero binario rappresentata utilizzando matrice
- 10. Creazione albero somma di albero binario Scala
- 11. stampa un albero binario su un lato
- 12. Albero di ricerca binario su albero AVL
- 13. Trasferimento ad albero binario
- 14. C# - Albero binario semplice
- 15. Determinare se un albero binario è sottostruttura di un altro albero binario utilizzando le stringhe pre-ordine e in ordine
- 16. Trova un loop in un albero binario
- 17. eliminazione ricorsiva su un albero binario
- 18. BIT: utilizzando un albero indicizzato binario?
- 19. Costruire un albero binario bilanciato con foldr
- 20. albero binario implementazione in Ruby
- 21. Come implementare un albero non binario
- 22. Albero binario di espressioni matematiche
- 23. Che cos'è l'associatività degli operatori e perché è importante?
- 24. albero binario metodi statici in Java
- 25. Cos'è la sharding e perché è importante?
- 26. Perché la codifica java secure è importante?
- 27. Albero binario Ricerca in ampiezza
- 28. Perché l'heap è migliore di un albero binario per rappresentare una coda prioritaria?
- 29. Perché la "più importante const" deve essere const?
- 30. Perché/quando è importante specificare un operatore come esplicito?