¿Por qué necesitamos un árbol AVL en informática?

Árbol de búsqueda binaria normal (árbol sin equilibrio automático):

si inserto la siguiente matriz de elementos en BST,

10 20 30

El árbol de búsqueda binaria se verá así,

La complejidad de encontrar 30 (peor de los casos) es O (n).

Árbol AVL (árbol de equilibrio automático):

si inserto la siguiente matriz de elementos en el árbol AVL,

10 20 30

El árbol AVL se ve así (auto equilibrio basado en la diferencia de altura izquierda, derecha),

En el peor de los casos, también puedo encontrar un elemento en O (logn) debido a la propiedad de equilibrio automático.

Pros:

Mejor tiempo de ejecución para buscar.

Contras:

Mayor tiempo de ejecución para insertar y quitar.

Gracias.

En un árbol de búsqueda binario estándar, el número de elementos en el árbol que debe examinar para encontrar, insertar o eliminar un elemento es el número de nodos en la ruta desde la raíz hasta la raíz buscada, insertada o eliminada. nodo. Esto depende de la forma del árbol en particular. Por ejemplo, supongamos que construimos un árbol de n elementos por inserción repetida y los elementos se insertan en orden ordenado (quizás los datos fueron ordenados por una aplicación anterior). Entonces el árbol degenera en una lista vinculada; Todos los nodos están en una sola ruta. Ahora, una búsqueda debe examinar todos los n nodos en el peor de los casos y aproximadamente n / 2 nodos en promedio (suponiendo que todos los nodos tengan la misma probabilidad de ser buscados). Esto es muy malo en comparación con el valor lg n que obtenemos cuando el árbol está perfectamente equilibrado.

El propósito del árbol AVL es evitar los árboles mal formados y garantizar que el árbol esté siempre bien equilibrado para garantizar que tengamos buenos tiempos de búsqueda, inserción y eliminación.

Supongamos que construimos un árbol (binario o AVL) insertando repetidamente n elementos distintos en un árbol inicialmente vacío. A continuación se presenta una comparación del número promedio de elementos de datos que debemos examinar para encontrar un nodo que esté en el árbol para los dos tipos de árboles. (en lo siguiente lg n significa log base 2 de n).

Árboles de búsqueda binaria

árbol del mejor caso: <= lg n

caso promedio (promedio sobre todos los árboles suponiendo que cada orden de inserción es igualmente probable): (aprox.) 1.39 lg n

árbol del peor de los casos: (n + 1) / 2

Árboles AVL

árbol del mejor caso: <= lg n (idéntico al mejor caso del árbol binario)

promedio: ???

árbol del peor de los casos: 1,44 lg n

Observe que el peor caso para un árbol AVL es solo un poco peor que el caso promedio para un árbol de búsqueda binario (la constante es solo un 3.6% más alta). Empíricamente, los árboles AVL son más eficientes que los árboles de búsqueda binarios.

More Interesting

¿Cuál es la forma más fácil / intuitiva de aprender sobre algoritmos y estructuras de datos?

Cómo visualizar algunas estructuras de datos básicos y algoritmos

¿Cuál es el mejor libro para aprender algoritmos genéticos? ¿Por qué?

¿Cómo es constante la cadena STL C_str () cuando la clase misma es como una matriz dinámica?

¿Todos los algoritmos de agrupamiento no están supervisados?

Cómo resolver el problema de los módems (SPOJ.com - Problema EC_MODE) en SPOJ

Gráfico distribuido: ¿Cuál es la forma más efectiva de distribuir los nodos de un gráfico en diferentes servidores en un sistema distribuido?

¿Cómo puede el comercio algorítmico o de patrones generar ganancias cuando la teoría de eficiencia del mercado (de forma débil) argumenta que la información de precios pasada es irrelevante?

¿Por qué los estudiantes chinos tienen un talento extraordinario en programación y algoritmos?

¿Cuál es la diferencia (si la hay) entre un algoritmo y un método / función?

¿Qué algoritmos se pueden usar para determinar si dos preguntas (como las de Quora) son de alguna manera similares?

¿Cómo debo comenzar a aprender estructuras de datos y algoritmos? ¿Cuáles son algunos buenos libros, cursos en línea e idiomas preferidos?

¿Qué son los algoritmos? ¿Cómo trabajan?

Deje G (V, E) ser un gráfico conectado, no dirigido, dar un algoritmo O (| V | + | E |) para calcular una ruta en G que atraviesa cada borde en E exactamente una vez en cada dirección?

¿Cuál es el mejor algoritmo para calcular la cantidad de números primos?