Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

4_1

Á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.

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

Ilustración 1_Formas de representar una estructura de árbol. Notación indentada y grafo

Las definiciones a tener en cuenta son:


• Raíz del árbol. Todos los árboles que no están vacíos tienen un único nodo raíz. Todos los demás
elementos o nodos se derivan o descienden de él. El nodo raíz no tiene padre, es decir, no es el hijo
de ningún elemento.
• Nodo, son los vértices o elementos del árbol.
• Nodo terminal u hoja (leaf node) es aquel nodo que no contiene ningún subárbol (los nodos
terminales u hojas del árbol).
• A cada nodo que no es hoja se asocia uno o varios subárboles llamados descendientes (offspring)
o hijos. De igual forma, cada nodo tiene asociado un antecesor o ascendiente llamado padre.
• Los nodos de un mismo padre se llaman hermanos.
• Los nodos con uno o dos subárboles —no son hojas ni raíz— se llaman nodos interiores o internos.
• Una colección de dos o más árboles se llama bosque (forest).
• Todos los nodos tienen un solo padre —excepto la raíz— que no tiene padre.
• Se denomina camino el enlace entre dos nodos consecutivos y rama es un camino que termina en
una hoja.
• Cada nodo tiene asociado un número de nivel que se determina por la longitud del camino desde
la raíz al nodo específico

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:

• Árbol AVL Simple


• Árbol AVL Balanceado Perfecto
• Árbol AVL Balanceado Completo
22300648(Gomez Gomez Carlos Mario)
22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos
• Árbol AVL en Memoria Principal
• Árbol AVL Distribuido
• Árbol AVL Auto-Balanceado

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.

Características de árbol AVL


Árbol binario de búsqueda: Cada nodo en un árbol AVL tiene, como máximo, dos hijos: un hijo
izquierdo y un hijo derecho. Además, para cada nodo, todos los nodos en su subárbol izquierdo
tienen valores menores que el nodo, y todos los nodos en su subárbol derecho tienen valores
mayores.

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.

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

Ilustración 4 Árbol que no


cumple con la condición de
equilibrio de los árboles AVL.

Ilustración 3 Árbol AVL enteros

El árbol AVL de enteros de la ilustración 3 se quiere agregar el entero 3. Si lo hacemos con el


procedimiento normal de inserción de árboles binarios de búsqueda el resultado sería el árbol de la
ilustración 4 el cual ya no cumple con la condición de equilibrio de los árboles AVL dado que la altura

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.

Ilustración 5 árbol antes de la rotación simple

El árbol de ilustración 5. Dado que este es un árbol de búsqueda se


debe cumplir x < y y además todos los nodos del subárbol A deben ser
menores que x y y; todos los nodos del subárbol B deben ser mayores
que x pero menores que y; y todos los nodos del subárbol C deben ser mayores que y y por lo tanto
que x.

En la ilustración 6 se ha modificado sencillamente el árbol. Como puede verificarse fácilmente por


las desigualdades descriptas en el párrafo anterior, el nuevo árbol sigue manteniendo el orden entre
sus nodos, es decir, sigue siendo un árbol binario de búsqueda. A esta transformación se le
denomina rotación simple (o sencilla).

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

Ilustración 6 árbol luego de la rotación simple Ilustración 7. Restablecimiento de la propiedad de equilibrio


mediante una rotación simple sobre el nodo de valor 5.

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

Ilustración 9 rotaciones simples

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

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.

pueden ocurrir "desequilibrios en zig-zag", es decir desequilibrios que no son ni a la derecha ni a la


izquierda como es el caso de los árboles de la siguiente ilustración.

Ilustración 10 Ejemplos de "desequilibrios" en los cuales no funciona la rotación

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.

Ilustración 11 Rotación doble izquierda

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

Rotación doble a la derecha (RL):

• La rotación doble a la derecha se aplica cuando el factor de equilibrio de un nodo (A) se


vuelve menor que -1 debido a la inserción en el subárbol izquierdo de su hijo derecho (B).
• Para corregir este desequilibrio, primero se realiza una rotación simple a la izquierda en el
hijo derecho (B).
• Luego, se realiza una rotación simple a la derecha en el nodo original (A).
• Esta secuencia de rotaciones restablece el equilibrio del árbol.

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.

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

Ilustración 12 Eliminación de un nodo (7) con un sólo hijo.

• 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:

• Costo de mantenimiento del equilibrio


• Uso de memoria
• Inserción y eliminación costosas
• Conjuntos de datos ordenados
• Implementación cuidadosa

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.

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)
4_1
Árboles y grafos
Ejemplificar el uso de árboles y grafos

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

Estructura de datos: (3.a ed.). (2006). Osvaldo Cairio, Silvia Guardati.

Fundamentos de programación: Algoritmos, estructura de datos y objetos: (5ta ed.). (2008). Luis
Joyanes Aguilar.

AVL. (s. f.). Recuperado 6 de noviembre de 2023, de


https://ccia.ugr.es/~jfv/ed1/tedi/cdrom/docs/avl.html

22300648(Gomez Gomez Carlos Mario)


22300665(Hidalgo Acosta Esmeralda)
22300701(Matias De La O Luis Fernando)
22300707(Montejo De La Cruz Rebecca Berenice)
22300773(Torres Escobar Jose Rodrigo)

You might also like