Vous êtes sur la page 1sur 24

Facultad de Ingeniera

Escuela de Computacin
Programacin III

UNIDAD IV.
ARBOLES

Arboles Balanceados (AVL).

Objetivos
Construir rboles binarios de bsqueda equilibrados.
Describir los diversos tipos de movimientos que se hacen
cuando se desequilibra un rbol.
Disear rboles AVL en C#.

Por qu es eficiente la bsqueda en un ABB?


Si un ABB tiene distribuidos sus elementos en forma balanceada, se
obtendr el mayor beneficio, pues se haran las mismas comparaciones
que en una bsqueda binaria sobre un arreglo.
El peor caso de una bsqueda en un ABB est determinado por la altura
del rbol y, por lo tanto, entre menor altura tenga el ABB, es decir, entre
ms balanceado est se obtendrn mejores resultados.

Qu ventaja ofrece un ABB sobre el algoritmo de bsqueda


binaria?
Aunque la eficiencia de una bsqueda en un ABB es igual a la del
algoritmo de la bsqueda binaria en una estructura lineal, el ABB ofrece
adicionalmente la ventaja de su representacin por medio de ligas.
La mejor representacin para un ABB ser utilizando memoria dinmica
obteniendo as sus beneficios, pues el algoritmo de bsqueda binaria
pierde su eficiencia si se trata de aplicar en una lista encadenada
ordenada.

Qu desventajas tiene un ABB?


La principal desventaja de un ABB es la forma en que se realizan las
inserciones y eliminaciones de elementos.
El orden de insercin y eliminacin determina la forma en que se
balancea el rbol y, por lo tanto, repercute en las bsquedas posteriores.
En el peor de los casos, un ABB puede degenerar en una lista sobre la
que se aplicar una bsqueda secuencial.
Se puede hacer la prueba insertando en el rbol vaco una secuencia
ordenada de datos y comprobando que el rbol que se forma es uno en
que slo se encadenan los nodos por medio de un solo apuntador y se
degenera en una lista.
Obviamente, en este caso el algoritmo de bsqueda en el ABB se
comportar como una bsqueda secuencial.

Qu aplicaciones tiene un ABB?


Un ABB ser til en cualquier aplicacin en la que se requiera
administrar un grupo ordenado de datos en memoria principal con el
objetivo bsico de buscar de manera eficiente cualquier dato.
Por qu es importante el balanceo en un rbol de bsqueda?
La manera en que los elementos estn distribuidos en un rbol de
bsqueda determinar su altura y, en consecuencia, la cantidad de
comparaciones a realizar al buscar un elemento (eficiencia).
Lo ideal sera que el rbol tuviera sus elementos distribuidos en forma
equilibrada o balanceada, consiguiendo as la mayor eficiencia que
ofrece la bsqueda binaria.

Anlisis general de la eficiencia de bsqueda en un ABB?

La cantidad mxima de comparaciones al realizar una


bsqueda en un ABB est determinada por la altura del rbol.
Si un ABB degenera en una lista, se tiene un rbol cuya altura
es igual a la cantidad de nodos en el rbol y el peor caso
corresponder a realizar tantas comparaciones como nodos
tenga el rbol.
Sin embargo, qu pasa si el rbol est balanceado?
Si la altura de un ABB determina la cantidad mxima de
comparaciones en una bsqueda, lo ideal sera tener la altura
mnima que puede tener un ABB para n elementos.
La altura mnima en un ABB con n elementos se dar en la
medida en que cada nivel del rbol est integrado a su mxima
capacidad.

Anlisis general de la eficiencia de bsqueda en un ABB?

Al analizar cual es la cantidad mxima de nodos que puede


tener cada nivel en un ABB, en la figura se puede observar que:

Por lo tanto, se tiene que el nmero mximo de nodos en un


rbol binario de altura k es de: 2k 1.

Anlisis general de la eficiencia de bsqueda en un ABB?

Ahora bien, si la altura de un ABB determina el nmero mximo de


comparaciones al buscar un elemento, Cuntas comparaciones
se harn al buscar un elemento en un ABB ideal que tiene n
elementos?
De acuerdo con el anlisis que hemos hecho, la respuesta se
obtiene al encontrar el valor de k , dado el valor de n para la
frmula:
n = 2k 1
Por lo tanto, despejando k, aplicando las leyes de los logaritmos,
se obtiene:
k = Log2 (n+1)
Entonces, la cantidad mxima de comparaciones a realizar en un
ABB ideal de n elementos es: Log2 (n+1)
Lo anterior nos lleva a concluir que, para que el peor caso de una
bsqueda en un ABB se cumpla con la mayor eficiencia posible, el
ABB debe estar balanceado.

QUE ES UN ARBOL BALANCEADO?


Se considera que un rbol binario est balanceado cuando
todos sus niveles, excepto el ltimo, estn integrados a la
mxima capacidad de nodos.
Las investigaciones respecto a esta estructura de datos no han
logrado encontrar una tcnica eficiente para manejar rboles de
bsqueda completamente balanceados; las propuestas han
llegado slo a presentar rboles parcialmente balanceados, sin
repercutir en la eficiencia de las operaciones de insercin y
eliminacin de nodos.
La ms comn y usada de las tcnicas es la de los rboles AVL.

QUE ES UN ARBOL AVL?


Un rbol AVL es un rbol binario de bsqueda que trata de
mantenerse lo ms balanceado posible, conforme se realizan
operaciones de insercin y eliminacin.
Fueron propuestos en 1962 por los matemticos rusos Adelson,
Velskii y Landis, de donde surge su nombre.
Su contribucin principal consisti en presentar algoritmos
eficientes de insercin y eliminacin de elementos
considerando un balanceo en el rbol que, a su vez, repercute
en la eficiencia de las bsquedas

QUE ES UN ARBOL AVL?


Formalmente, en los rboles AVL se debe cumplir el hecho de que
para cualquier nodo del rbol, la diferencia entre las alturas de sus
subrboles no exceda una unidad tal como se muestra a
continuacin:

QUE ES EL FACTOR DE BALANCE (FB) DE UN NODO?


Los nodos de un rbol AVL guardan un valor entre 1 y -1, lo que
se conoce como Factor de Balance (FB), y representa la
diferencia entre las alturas de sus subrboles.
Un FB igual a cero de un nodo significa que las alturas de sus
subrboles son iguales.
un FB positivo significa que el subrbol derecho es ms grande
que el izquierdo
un FB negativo que el subrbol izquierdo es ms grande que el
derecho.

QUE ES EL FACTOR DE BALANCE (FB) DE UN NODO?


En la imagen siguiente vemos un ejemplo de estos factores de
balance:

Cmo se realiza el proceso de insercin de un elemento


en un rbol AVL?
Inicialmente, el proceso de insercin de un elemento en un rbol AVL es
idntico al de un ABB: se busca la posicin en el rbol en que el nuevo
elemento quede como un nodo hoja (puesto que el nuevo nodo es hoja,
tendr un FB igual a cero).
Una vez hecha la insercin como si fuera un ABB, se deber verificar si
afecta el balanceo del rbol, segn las reglas de los AVL.
El mejor de los casos ser cuando el nuevo nodo no provoque un
desbalanceo, implicando slo la modificacin de los FB de los ancestros al
nuevo nodo.
El otro caso ser cuando ocurra un desbalanceo que obligue a hacer
movimientos de apuntadores y de FB para balancearlo.
La forma de detectar algortmicamente en qu caso se har o no un
balanceo en el AVL, se basa en la bsqueda de un nodo pivote.
Un nodo pivote es aquel que tiene un FB diferente de cero y es el ms
cercano de los ancestros del nodo recin insertado.

Cmo se realiza el proceso de insercin de un elemento


en un rbol AVL?
Basados en este concepto, se pueden detectar los siguientes casos:
1. El rbol AVL carece de nodo pivote. Esto significa que todos los
ancestros del nuevo nodo tienen un FB igual a cero.
En este caso, el nuevo nodo no desbalancea el rbol y slo se tendrn
que ajustar los valores de los FB de todos los ancestros, volvindose
positivos o negativos, segn el valor del nuevo elemento.

Cmo se realiza el proceso de insercin de un elemento


en un rbol AVL?
2. El rbol AVL tiene nodo pivote y el nuevo se ha insertado en el subrbol
ms pequeo del pivote. En este caso tampoco habr desbalanceo,
pues se igualan las alturas de los dos subrboles de nodo pivote, y slo
se tendrn que ajustar los FB de los ancestros que estn a partir del
nodo pivote, volvindose positivos o negativos segn el valor del nuevo
elemento.

Existe un nodo pivote y la insercin se realiza sobre el subrbol ms


pequeo del nodo pivote

Cmo se realiza el proceso de insercin de un elemento


en un rbol AVL?
3. El rbol AVL tiene nodo pivote y en el subrbol ms grande de ste se
inserta el nuevo nodo.
En este caso se desbalancea el rbol a partir del nodo pivote y tendr
que realizarse un balanceo.

Cmo se realiza un balanceo en un rbol AVL?


Adelson, Velskii y Landis detectaron que, ante un problema de
desbalanceo, todos los casos podan resolverse aplicando uno
de los cuatro esquemas sencillos de balanceo; a estos
esquemas los llamaron rotaciones (por la forma en que se
mueven los nodos), y consisten en modificar los apuntadores
de ciertos nodos, segn el esquema, junto con algunos FB.
Lo ms valioso de esta propuesta es que el balanceo afecta
slo los nodos que forman parte del subrbol, cuya raz es el
nodo pivote, dejando intactos los nodos del resto del rbol.

Cmo se realiza un balanceo en un rbol AVL?


El esquema de rotacin simple, que puede ser izquierda (RSI) o
derecha (RSD) implica el movimiento de tres apuntadores (ver figura
a continuacin).

Cmo se realiza un balanceo en un rbol AVL?


El esquema de la rotacin doble, que tambin puede ser izquierda
(RDI) o derecha (RDD), implica el movimiento de cinco apuntadores.

Algoritmo para la insercin de un nodo en un rbol AVL


1. Inserte el nodo como en un ABB (rutina de insercin ya conocida).
2. Busque el nodo pivote. Coloque los apuntadores P1, P2, P3 y P4, donde:
P1 = apuntador al nodo padre del nodo pivote.
P2 = apuntador al nodo pivote.
P3 = apuntador al nodo hijo del nodo pivote, que es la raz del subrbol ms
grande.
P4 = apuntador al nodo hijo del nodo apuntado por P3, que sigue en la ruta
de bsqueda del nuevo nodo.
3. Si no existe nodo pivote (P2 apunta a vaco), entonces modifique los FB
desde la raz hasta el nuevo nodo (rutina que modifica los FB).
Si el nuevo nodo se insert en el subrbol ms pequeo del nodo pivote,
entonces modifique los FB desde el nodo pivote hasta el nuevo (rutina que
modifica los FB).
Si no es as, verifique el tipo de rotacin:
Si es rotacin simple, entonces:
-> Modificar apuntadores y FB (rutina que realiza la rotacin simple).
Si no,
-> Modificar apuntadores y FB (rutina que realiza la rotacin doble).

Algoritmo para la insercin de un nodo en un rbol AVL


Ejemplo: Insercin del elemento 52 sobre un rbol AVL

Algoritmo para la insercin de un nodo en un rbol AVL


La insercin se realiza como en un ABB

Algoritmo para la insercin de un nodo en un rbol AVL


El pivote es el 45 y la insercin provoca una rotacin simple a la izquierda,
que genera el rbol:

Vous aimerez peut-être aussi