Arboles Binarios - Exp - ABB - AVL AyED-2010 Final
-
Upload
fernando-cervantes-monteagudo -
Category
Documents
-
view
363 -
download
2
Transcript of Arboles Binarios - Exp - ABB - AVL AyED-2010 Final
Algoritmos y
Estructuras de Datos
Cursada 2010
Prof. Catalina Mostaccio
Prof. Alejandra Schiavoni
Facultad de Informática - UNLP
Árboles Binarios
Algoritmos y Estructuras de Datos
Algoritmos y Estructuras de Datos 3
Agenda
�� ÁÁrbol Binariorbol Binario
�� ÁÁrboles de Expresirboles de Expresióónn
�� ÁÁrbol Binario de Brbol Binario de Búúsquedasqueda
�� ÁÁrboles AVLrboles AVL
Algoritmos y Estructuras de Datos 4
Árbol Binario: Definición
� Un árbol binario es una colección de nodos,
tal que:
• puede estar vacía
• puede estar formada por un nodo distinguido R,
llamado raíz y dos sub-árboles T1 y T2, donde la
raíz de cada subárbol Ti está conectado a R por
medio de una arista
Algoritmos y Estructuras de Datos 5
Árbol de Expresión
Es un árbol binario asociado a una expresión aritmética
�Nodos internos representan operadores
�Nodos externos (hojas) representan operandos
Algoritmos y Estructuras de Datos 6
Árbol de Expresión
Ejemplo:
+
a b
-
c d
+
e f
*
/
Algoritmos y Estructuras de Datos 7
Árbol de Expresión
Recorriendo el árbol, obtenemos:
Inorden: (((a + b) * (c – d)) / (e + f))
Preorden: /*+ab-cd+ef
Posorden: ab+cd-*ef+/
Algoritmos y Estructuras de Datos 8
Construcción de un árbol de expresión
A partir de una:
� Expresión postfija
� Expresión prefija
� Expresión infija
-
+25*
43
Algoritmos y Estructuras de Datos 9
Construcción de un árbol de expresión a partir de una expresión postfija
Algoritmo: tomar un carácter de la expresiónmientras ( existe carácter ) hacer
si es un operando � creo un nodo y lo apilo.si es un operador (lo tomo como la raíz de los dos
últimos nodos creados)� - creo un nodo R,
- desapilo y lo pongo como hijo derecho de R- desapilo y lo pongo como hijo izquierdo de R- apilo R.
tomo otro carácterfin
Algoritmos y Estructuras de Datos 10
Construcción de un árbol de expresión a partir de una expresión prefija
Algoritmo:
ArbolExpresión (A: ArbolBin, exp: string )
si exp nulo � nada. si es un operador � - creo un nodo raíz R
- ArbolExpresión (subArbIzq de R, exp(sin 1° carácter) )
- ArbolExpresión ( subArbDer de R, exp(sin 1° carácter) )
si es un operando � creo un nodo (hoja)
Algoritmos y Estructuras de Datos 11
Construcción de un árbol de expresión a partir de una expresión infija
Expresión infijaSe usa una pila y se tiene en cuenta la precedencia de los operadores
Expresión postfija
Se usa la estrategiaanterior
Árbol de Expresión
2+5*3+1
253*+1+
Algoritmos y Estructuras de Datos 12
Árbol Binario de Búsqueda: Definición
Un árbol binario de búsqueda es una
colección de nodos conteniendo
claves, que debe cumplir con una
propiedad estructural y una de orden.
Algoritmos y Estructuras de Datos 13
Árbol Binario de Búsqueda
La propiedad estructural: es un árbol binario
La propiedad de orden, es la siguiente:
para cada nodo N del árbol se cumple que
todos los nodos ubicados en el subárbol
izquierdo contienen claves menores que la
clave del nodo N y los nodos ubicados en el
subárbol derecho contienen claves mayores
que la clave del nodo N
Algoritmos y Estructuras de Datos 1414
Árboles AVL
�� DefiniciDefinicióónn
�� CaracterCaracteríísticassticas
�� InserciInsercióónn
�� DesbalanceoDesbalanceo
�� Rotaciones Simples y DoblesRotaciones Simples y Dobles
�� EliminaciEliminacióónn
Algoritmos y Estructuras de Datos 1515
Árbol AVL: Definición
Un árbol AVL (Adelson–Velskii–Landis) es un árbol
binario de búsqueda que cumple con la condición
de estar balanceado
� La propiedad de balanceo que cumple dice:
Para cada nodo del árbol, la diferencia de altura
entre el subárbol izquierdo y el subárbol derecho es
a lo sumo 1
Algoritmos y Estructuras de Datos 1616
Características
� La propiedad de balanceo es fácil de mantener y garantiza que la altura del árbol es de O(log n)
� En cada nodo del árbol se guarda información de la altura
� La altura del árbol vacío es -1
� Se debe mantener el balanceo al realizar las operaciones sobre el árbol (inserción y borrado)
Algoritmos y Estructuras de Datos 1717
Operaciones en un AVL
� Inserción
� Eliminación
Algoritmos y Estructuras de Datos 1818
Inserción en el árbol AVL
� La inserción se realiza igual que en un árbol binario de búsqueda
� Puede destruirse la propiedad de balanceo
Rebalancear el árbol
Algoritmos y Estructuras de Datos 1919
Problemas: Desbalanceo
� Al insertar un elemento se actualiza la información de la altura de los nodos que están en el camino desde el nodo insertado a la raíz
� El desbalanceo sólo se produce en ese camino, ya que sólo esos nodos tienen sus subárboles modificados
Algoritmos y Estructuras de Datos 2020
Problemas: Desbalanceo
Ejemplo al insertar un nodo
1010
66 1717
1515 202044
22
1010
66 1717
1515 202044
Árbol después de insertar el 2
Se desbalancea el 6
Algoritmos y Estructuras de Datos 2121
Rebalanceo del árbol�Para restaurar el balanceo del árbol:
�se recorre el camino de búsqueda en orden inverso
�se controla el equilibrio de cada nodo
�Si está desbalanceado se realiza una modificación simple: rotación
�después de rebalancear el nodo, la inserción termina
�este proceso puede llegar a la raíz
Algoritmos y Estructuras de Datos 2222
Rebalanceo del árbol
Hay 4 casos posibles de desbalanceo a tener en cuenta, según donde se hizo la Inserción. El nodo A es el nodo desbalanceado.
AA AA
AAAA
1. Inserción en el Subárbol IZQ del hijo IZQ de A
2. Inserción en el Subárbol DER del hijo IZQ de A
4. Inserción en el Subárbol DER del hijo DER de A
3. Inserción en el Subárbol IZQ del hijo DER de A
Algoritmos y Estructuras de Datos 2323
Rebalanceo del árbol
� La solución para restaurar el balanceo es la ROTACION
La rotación es una modificación simple de la estructura del árbol, que restaura la propiedad de balanceo, preservando el orden de los elementos
Algoritmos y Estructuras de Datos 2424
Rebalanceo del árbol
� Existen dos clases de rotaciones:
�Rotación Simple: Casos 1 y 4: inserción en el lado externo
�Rotación Doble: Casos 2 y 3: inserción en el lado interno
�Soluciones simétricas: En cada caso, los subárboles están opuestos.
Algoritmos y Estructuras de Datos 2525
Rotación SimpleCaso 1: Rotación Simple Izq-Izq
2
1
AB
C
2
1
A B C
Se obtuvo nuevamente un árbol balanceado
Algoritmos y Estructuras de Datos 2626
Rotación Simple (cont.)
1010
66 1717
1515 202044
22
Siguiendo con el ejemplo:
1010
44 1717
1515 202022 66
Rot. Simple
Algoritmos y Estructuras de Datos 2727
Rotación Simple (cont.)
Caso 4: Rotación Simple Der-Der
Es simétrico al caso 1, el desbalanceo se produce hacia el lado derecho
Algoritmos y Estructuras de Datos 2828
Rotación Simple (cont.)
Ejemplo:
Insertar las claves del 1 al 7 en ese orden, en un árbol AVL inicialmente vacío
Algoritmos y Estructuras de Datos 2929
Rotación Simple (cont.)11
22
33
Rot. Simple con Derecho 22
11 33
44
55
22
11 33
44
33 55
Rot. Simple con Derecho
�
22
11 44
3355
�
Algoritmos y Estructuras de Datos 3030
Rotación Simple (cont.)
Siguiendo con el ejemplo:
44
22 55
6611 33
Rot. Simple22
11 44
33 55
66
Algoritmos y Estructuras de Datos 3131
Rotación Simple (cont.)
Siguiendo con el ejemplo:
44
22 55
6611 33
77
Rot. Simple 44
22 66
7711 33 55
Algoritmos y Estructuras de Datos 3232
� En algunos casos la rotación simple no
resuelve el problema
Caso 2: Rotación Doble Izq-Der
Rotación Doble
6060
3030
4040
Rotación Simple3030
6060
4040
Algoritmos y Estructuras de Datos 3333
Rotación Doble (cont.)
3
1
AC
B
� Dado que el subárbol B tiene por lo menos un ítem, podemos considerar que está formado por una raíz y dos subárboles
3
1
AC
2
B1 B2
Algoritmos y Estructuras de Datos 3434
Rotación Doble (cont.)� La rotación doble es similar a la simple, sólo que involucra cuatro subárboles en lugar de tres
� Ni los nodos 1 y 3 pueden quedar como raíz, la única alternativa es que quede el nodo 2
3
C
2
B1
B2
1
A
Primero se hace una rotación simple entre 1 y 2
Algoritmos y Estructuras de Datos 3535
Rotación Doble (cont.)
A CB1 B2
1 3
2 Luego se hace una rotación simple entre 2 y 3
Algoritmos y Estructuras de Datos 3636
Rotación Doble (cont.)
Caso 3: Rotación Doble Der-Izq
Es simétrica al caso 2, la inserción se
produce en el subárbol izquierdo del hijo
derecho.
Algoritmos y Estructuras de Datos 3737
Rotación Doble (cont.)
� Ejemplo:
Continuar con el ejemplo anterior, insertando
las claves del 8 al 15 en orden inverso.
¡¡¡ Tarea para el hogar !!!
Algoritmos y Estructuras de Datos 3838
Eliminación de un nodo
� La eliminación de un nodo es similar al borrado en un árbol binario de búsqueda.
� Luego de realizar el borrado se debe actualizar la altura de todos los nodos, desde el nodo en cuestión hasta la raíz.
� Puede destruirse la propiedad de balanceo
Rebalancear el árbol
Algoritmos y Estructuras de Datos 3939
Eliminación de un nodo
Se elimina el nodo 13, se desbalancea el 14
Algoritmos y Estructuras de Datos 4040
Eliminación de un nodoRotación simple entre el 14 y
15. Queda desbalanceado el 12
Rotación simple entre el 5 y 12.
Algoritmos y Estructuras de Datos 4141
Tiempo de ejecución de las operaciones en AVL
Las operaciones de:
Búsqueda
Inserción
Eliminación
Recorren la altura del árbol en el peor caso
Algoritmos y Estructuras de Datos 4242
Tiempo de ejecución de las operaciones en AVL (cont.)
Dado que un árbol AVL cumple con la condición de balanceo
Tomamos Nh como el número de nodos en un árbol AVL de altura hNh > Nh-1 + Nh-2 + 1
> 2 N h-2 + 1
> 1 + 2(1 + 2 Nh-4)= 1 + 2 + 22 Nh-4
> 1 + 2 + 22 + 23 N h-6
...
> 1 + 2 + 22 + 23 + ... + 2h/2 = 2(h/2+1) – 1
Entonces:
Algoritmos y Estructuras de Datos 4343
Tiempo de ejecución de las operaciones en AVL (cont.)
2(h/2+1) – 1 < n
h/2 + 1 < log 2(n + 1)
h < 2 (log 2(n + 1) – 1)
Un análisis cuidadoso basado en la teoría de los números de Fibonacci, nos da un valor más ajustado de 1.44 log 2(n + 2).
Algoritmos y Estructuras de Datos 4444
Operaciones sobre los árboles AVL: Conclusiones
� Las operaciones de inserción y eliminación de un nodo son similares a las de un árbol binario de búsqueda.
� En ambas operaciones se debe actualizar la información de la altura y realizar rotaciones si es necesario.
� La inserción provoca una única reestructuración.
� La eliminación puede provocar varias reestructuraciones.
� Las operaciones son de O(log n)