Professional Documents
Culture Documents
Arboles AVL
Arboles AVL
Árboles y grafos
Ejemplificar el uso de árboles y grafos
4_1 Arboles
En el campo de la informática y la ciencia de la computación, los árboles son una estructura de datos
fundamental que se utiliza para organizar y representar información de manera jerárquica. Los
árboles son ampliamente utilizados en la programación y la gestión de datos debido a su versatilidad
y eficiencia en una variedad de aplicaciones. Los árboles son estructuras de datos fundamentales
en el campo de la informática que se utilizan para organizar y representar información de manera
jerárquica. A diferencia de las estructuras de datos lineales, como las listas o los arrays, los árboles
son estructuras no lineales, lo que significa que los elementos se organizan en una jerarquía de
ramificaciones y nodos.
La característica dinámica de los árboles se refiere a su capacidad para cambiar tanto en forma como
en tamaño durante la ejecución de un programa. Esto significa que puedes agregar, eliminar o
modificar nodos en un árbol según las necesidades de tu aplicación, lo que lo hace muy versátil para
gestionar datos en evolución constante.
La propiedad no lineal de los árboles se relaciona con el hecho de que cada elemento en un árbol
puede tener más de un sucesor, es decir, puede tener varios nodos conectados debajo de él en
diferentes niveles de la jerarquía. Esto permite representar relaciones complejas entre los datos y es
útil en situaciones donde los elementos tienen múltiples conexiones o dependencias.
Los árboles son estructuras de datos dinámicas y no lineales que se utilizan para organizar
información en jerarquías, lo que los hace adecuados para una amplia gama de aplicaciones en
informática, desde la gestión de datos en bases de datos hasta la representación de estructuras. de
datos complejos en algoritmos y aplicaciones. Existen varios tipos de árboles, cada uno con sus
propias características y aplicaciones específicas. Uno de los tipos de árboles más importantes es
el árbol AVL, el cual se caracteriza por su capacidad para mantener un equilibrio entre sus nodos, lo
que garantiza un acceso rápido y eficiente a los datos almacenados en él. Los árboles AVL son una
variante de los árboles binarios de búsqueda y son ampliamente utilizados en aplicaciones donde se
requiere una rápida búsqueda y recuperación de datos, como bases de datos y sistemas de
búsqueda. A medida que profundicemos los árboles AVL, veremos cómo funcionan en detalle y cómo
se mantienen equilibrados, lo que los hace particularmente útiles en aplicaciones críticas donde el
rendimiento es esencial
Un árbol se puede definir como una estructura jerárquica aplicada sobre una colección de elementos
y objetos llamados nodos, uno de los cuales es conocido como raíz, además se crea una relación o
parentesco entre los nodos dando lugar a términos como padre, hijo, hermano, antecesor, sucesor,
ancestro, etcétera.
Arboles AVL
Un árbol AVL es un tipo específico de árbol binario de búsqueda (BST, por sus siglas en inglés:
Binary Search Tree) que se caracteriza por estar equilibrado en términos de altura. La sigla "AVL"
proviene de los apellidos de los matemáticos rusos Adelson-Velsky y Landis, quienes lo introdujeron
en 1962.
En la estructura de los árboles AVL, no existen "tipos" en el sentido tradicional como en los
lenguajes de programación. Sin embargo, es posible clasificar los árboles AVL según ciertas
propiedades y características. Aquí te muestro algunas clasificaciones comunes de árboles AVL:
Estas clasificaciones son más acerca de las propiedades y el entorno de uso de los árboles AVL
que de diferentes "tipos" en el sentido de una estructura de datos completamente diferente. En la
práctica, la mayoría de los árboles AVL que encuentres en aplicaciones cumplirán con las
propiedades básicas de un árbol AVL simple, y el objetivo principal es mantener el equilibrio
constante para un rendimiento eficiente.
El árbol AVL es denominado como un árbol binario que puede ser implementado fácilmente en una
computadora. Un árbol binario es un conjunto finito de cero o más nodos, tales que:
• Existe un nodo denominado raíz del árbol.
• Cada nodo puede tener 0, 1 o 2 subárboles, conocidos como subárbol izquierdo y subárbol derecho.
La siguiente figura representa diferentes tipos de árboles binarios:
Ilustración 2 Ejemplos de árboles binarios: a) expresión árbol a + b/c; b) y c) dos árboles diferentes con valores enteros
Básicamente un árbol AVL es un árbol binario de búsqueda al que se le añade una condición de
equilibrio. Esta condición es que para todo nodo la altura de sus subárboles izquierdo y derecho
pueden diferir a lo sumo en 1.
Propiedad de equilibrio: Se refiere al hecho de que, en cada nodo del árbol, la diferencia entre la
altura del subárbol derecho y la altura del subárbol izquierdo (conocida como el "factor de equilibrio")
debe ser uno. de los siguientes valores: -1, 0 o 1. Esta propiedad garantiza que el árbol esté
equilibrado de manera automática y que no haya ramas que crezcan de manera desproporcionada
en altura, lo que a su vez asegura un rendimiento eficiente en operaciones de búsqueda, inserción
y eliminación.
del subárbol izquierdo es 3 y la del subárbol derecho es 1. En el número 5 se pasa una serie de
operaciones sobre los nodos de un árbol AVL con las cuales poder restaurar la propiedad de
equilibrio de un árbol AVL luego de agregar o eliminar elementos.
Consideraciones sobre la altura de los nodos: se requiere mantener un seguimiento de la altura
de cada nodo para garantizar que el árbol se mantenga equilibrado. Dado que calcular la altura de
un nodo en un árbol tendría un tiempo de ejecución de O(log(n)) en el peor de los casos, se opta por
almacenar una variable llamada "altura" en cada nodo y actualizarla cuando se inserte o eliminan
nudos en el árbol. Esto se hace para asegurar de que el árbol se mantenga equilibrado de manera
eficiente y permita un rendimiento rápido en las operaciones. Mantener esta variable de altura es
necesario para cumplir con la propiedad de equilibrio de los árboles AVL.
Rotaciones simples: Veremos a continuación una operación sencilla sobre un árbol binario de
búsqueda que conserva el orden en sus nodos y que nos ayudará a restaurar la propiedad de
equilibrio de un árbol AVL al efectuar operaciones sobre el mismo que puedan perturbarla.
En este caso el "desequilibrio" en el árbol con raíz 5 era enteramente hacia la izquierda y, por lo
tanto, la rotación efectuada se denomina rotación simple izquierda. En el caso de un "desequilibrio"
hacia la derecha, la rotación es análoga y se denomina rotación simple derecha. En ilustración 8 se
ven dos árboles: el primero tiene un "desequilibrio hacia la derecha" marcado en rojo y el segundo
es el resultado de aplicar una rotación simple derecha.
Ilustración 8 Ejemplo de restablecimiento de propiedad de equilibrio gracias a una rotación simple derecha.
en la ilustración 9 se muestra la operación rotación simple. Los arcos de colores son los que se
eliminan o agregan, según sea la rotación izquierda o derecha
Rotaciones dobles: Las rotaciones dobles en árboles AVL se utilizan para restaurar el equilibrio
de un árbol cuando un nodo viola la propiedad de altura balanceada y requiere dos rotaciones
simples consecutivas para corregir su factor de equilibrio. Hay dos tipos de rotaciones dobles:
rotación doble a la derecha (RL) y rotación doble a la izquierda (LR). Estas rotaciones se aplican
cuando un nodo desequilibrado tiene un hijo con el factor de equilibrio opuesto.
En estos casos se aplica otro tipo de rotación denominado rotación doble la cual, análogamente a
la rotación simple, puede ser izquierda o derecha según el caso. En realidad, la rotación doble
constará de dos rotaciones simples. El caso general de la rotación doble izquierda en un árbol AVL
se puede observar en la siguiente ilustración.
Balance del árbol: cada vez que se modifique el árbol (agreguen o eliminen elementos) corremos
el riesgo de que pierda su propiedad de equilibrio en alguno de sus nodos, la cual debe conservarse
si queremos obtener tiempos de ejecución de orden O(log(n)) en el peor de los casos. La idea general
que se utiliza en esta implementación de árboles AVL para implementar los algoritmos de inserción
y de eliminación de nodos sobre un AVL es la siguiente:
• Efectuar los algoritmos de igual forma que en los árboles binarios de búsqueda pero
• en cada recursión ir actualizando las alturas y rebalanceando el árbol en caso de que sea necesario.
Inserción
Cuando insertamos elementos en un árbol AVL, lo hacemos de manera similar a cómo lo haríamos
en un árbol binario de búsqueda, pero con un paso adicional. En cada paso de nuestro algoritmo,
además de insertar el nuevo elemento, también verificamos si el equilibrio del árbol se ha visto
perturbado y, si es así, realizamos ajustes para restaurar el equilibrio. Además, es importante
mantener un seguimiento de la altura de cada nodo mientras realizamos estas operaciones, ya que
las rotaciones, inserciones y eliminaciones pueden modificar las alturas de los nodos. Mantener un
registro preciso de las alturas es esencial para garantizar que el árbol AVL se mantenga equilibrado
en todo momento. Al insertar elementos en un árbol AVL, seguimos un proceso similar al de un árbol
binario de búsqueda, pero también nos aseguramos de mantener el equilibrio del árbol y
actualizamos las alturas de los nodos en cada paso para asegurarnos de que el árbol se mantenga
equilibrado y eficiente.
Eliminación
La estrategia para diseñar el algoritmo de eliminación sobre árboles AVL es la misma que para la
inserción: Se utiliza el mismo algoritmo que sobre árboles binarios de búsqueda. Primero se recorre
el árbol para detectar el nodo a eliminar. Una vez hecho esto hay tres casos a diferenciar por su
complejidad:
• Si dicho nodo es una hoja procedemos a eliminarlos de inmediato, sin más.
• Si dicho nodo tiene un sólo hijo, el nodo puede eliminarse después de ajustar un apuntador del
padre para saltar el nodo. Esto se muestra en la siguiente ilustración.
• Si dicho nodo tiene dos hijos el caso es un poco más complicado. Lo que se estila hacer es
reemplazar el nodo actual por el menor nodo de su subárbol derecho (y luego eliminar éste).
Los árboles AVL son una estructura de datos eficiente y equilibrada, pero hay algunas
consideraciones adicionales que es importante tener en cuenta:
Los árboles AVL se utilizan en una variedad de aplicaciones, desde bases de datos y sistemas de
indexación hasta algoritmos de ordenamiento y motores de búsqueda. Sin embargo, es importante
tener en cuenta que, si bien ofrecen ventajas notables en términos de rendimiento, la necesidad de
realizar rotaciones para mantener el equilibrio puede aumentar el costo computacional,
especialmente en operaciones de inserción y eliminación frecuentes.
En conclusión, los árboles AVL son estructuras de datos poderosas para mantener conjuntos de
datos ordenados y realizar operaciones de búsqueda eficientes. Sin embargo, es importante
sopesar las ventajas y desventajas en función de los requisitos específicos de su aplicación. En
algunos casos, otras estructuras de datos, como árboles B o tablas hash, pueden ser más
adecuadas.
Fichas de consulta
Gurin, S. (s/f). Árboles AVL. Tldp.org. Recuperado el 6 de noviembre de 2023, de
http://es.tldp.org/Tutoriales/doc-programacion-arboles-avl/avl-trees.pdf
Fundamentos de programación: Algoritmos, estructura de datos y objetos: (5ta ed.). (2008). Luis
Joyanes Aguilar.