Universidad DaVinci Dr. Vicente Cubells (vcubells@udavinci.edu.mx)
Temario Arboles Arboles AVL
Características principales Factor de balanceo Inserciones Eliminaciones
Arboles B
Características principales Inserciones Eliminaciones
Árboles AVL Adelson, Velskii y Landis Es una modificación de los árboles binarios de
búsqueda. El proceso que este tipo de árbol utiliza para agregar y borrar nodos, mantiene parcialmente balanceado al árbol por lo que se pueden realizar búsquedas más eficientes. Recuerda que en un ABB, el orden en el que se agregan los nodos define la forma de árbol. Si los valores se agregan en orden, el ABB se transforma en una lista!
Balanceo Parcial Una Árbol AVL debe cumplir las siguientes reglas: Comportarse como un Árbol Binario de Búsqueda (menores a la izquierda, mayores a la derecha, etc.) Para cualquier nodo del árbol, la diferencia entre la altura del subárbol derecho menos la altura del subárbol izquierdo, no debe de exceder a una unidad
Ejemplo
Árbol AVL
Este Árbol NO ES AVL La diferencia entre la altura del subárbol derecho menos la del subárbol izquierdo es 2
Factor de Balanceo Todo nodo del árbol AVL debe incluir un Factor
de Balanceo que se obtiene de la siguiente manera: Factor de Balanceo =
Altura del subárbol derecho – Altura del subárbol izquierdo
Si el Factor de Balanceo es: CERO: las alturas son iguales -‐1: el subárbol izquierdo es más alto 1: el subárbol derecho es más alto
Agregar un nodo al AVL El nodo se agrega siguiendo las reglas de inserción de
un Árbol Binario de Búsqueda Si al agregar el nodo, el árbol cumple las reglas de un AVL el proceso termina de lo contrario se debe realizar una ROTACIÓN
Ejemplo
21
21
18
40
33
13
10
33
13
10 40
25 26
Al agregar el valor 26 el árbol cumple con las reglas de un AVL (el Factor de Balanceo de todos los nodos es 0, 1 ó –1) .
18
25 26 26 27
Al agregar el valor 27 el árbol se DESBALANCEÓ (el Factor de Balanceo para el nodo con el valor 25 ahora es 2). Se requiere una ROTACIÓN.
Rotación
Es el proceso que se realiza después de la
inserción para balancear el árbol
Sólo se realiza cuando el nodo que se agrega
causa un desbalanceo
Para iniciar la Rotación se debe encontrar el
NODO PIVOTE
NODO PIVOTE: Es el nodo ancestro más
cercano del nodo recién insertado cuyo Factor de Balanceo es diferente de cero
Ejemplos de Nodo Pivote Cuando se agrega el 26, No hay nodo PIVOTE. Por lo que el árbol no requiere una ROTACIÓN.
21 0 13 0
2 21
0
-2
10
2
18
2 25
0
33 0 40 0 26
1 26
0 10 26 27
-2
0 13
40
Cuando se agrega el 27 el nodo Pivote es 25.
-1
21
33 0
0 1 18 25
10
0 13
-1
33
0 18
0
1 25 1
22
26
0 40 Cuando se agrega el 27 el nodo Pivote es 33. 26 27
Ejemplo ¿cuándo rotar? 0
Como el nodo 45 se agregó en el subárbol más corto del 33, NO SE HACE LA ROTACIÓN.
21 0
0 13 0 10
33 0
18
0 25
0 40 0 26
No hay nodo Pivote para el 26 por lo que NO SE HACE LA ROTACIÓN.
1 0 13 0 10
0 18
1 0 13 0 10
0 18
21
-1 33
0 1 40 25 0 45 26
21 -1 33
0 1 40 25 0 26 27
Como el nodo 27 se agregó en el subárbol más largo del 25 SE DEBE HACER UNA ROTACIÓN.
Tipos de Rotación Rotación Simple Izquierda (RSI) Derecha (RSD) Rotación Doble Izquierda (RDI) Derecha (RDD)
Requiere el movimiento de 3 apuntadores y ajustar los Factores de Balanceo de los nodos afectados
Requiere el movimiento de 5 apuntadores y ajustar los Factores de Balanceo de los nodos afectados
Rotación Simple a la Izquierda Resto del árbol
+1
B
Resto del árbol
Nodo pivote A
0!
0
0
A
B
Ajustar FB en la ruta de búsqueda
0 Nuevo Nodo
Nuevo nodo!
Nuevo nodo
Ejemplo Paso 1 1 0 13 0 10
0 18
Paso 2 1
21 -1 33 0 1 40 25 0 26 27
Agregar el 27
RSI
21 -1 33
0 13 0 10
0 18 25
26
0
0 27
0 40
0
Hacer la Rotación Ajustar Factores de Balanceo
Rotación Simple a la Derecha El resto del árbol
-1 0!
B
El resto del árbol
Nodo pivote
A
0!
A
B
Ajustar FB en la ruta de búsqueda Nuevo nodo Nuevo nodo!
0
0!
Ejemplo... 1 13 0 10 0 15 14
Paso 1
Paso 2
0
0
21
-1 33
0 1 -1 40 25 18 0 26 Agregar el 14
1 13
RSD
0 10
0
14
21
-1 33
0 1 0 40 15 25 0 0 18 26
Hacer la Rotación Ajustar Factores de Balanceo
Ejemplo... Agregar Paso 2
Paso 1 1 0 13 0 10
21
-1 33
0 0 0 40 25 18 0 0 26 24 27
21
RSD
25
13 10
33
24 18
40
26 27
NO SE SOLUCIONA EL PROBLEMA!! SE DEBE HACER UNA ROTACIÓN DOBLE
Rotación Doble a la Izquierda Resto del árbol
+1
Resto del árbol
A 0
0
Nodo pivote
B
0
0,-
C
B
0,+
C
1!
2! 2!
A
3!
4!
1!
3! 0
0 Nuevo nodo
Nuevo nodo
4!
Ejemplo
Paso 1
Paso 2
1
1
21
0 13 0 10
0 1 18 25
-1 33
0 40
0 27
0 13
RDI
0 10
21
-1 33
0 0 0 40 26 18 0 0 27 25
26 Agregar el 26
Observa que se forma una escuadra entre el nodo pivote y sus siguientes dos descendientes.
Hacer la Rotación Ajustar Factores de Balanceo
Rotación Doble a la Derecha Resto del árbol
Resto del árbol
-1 0
A
0
Nodo pivote 0,-
B C
B
2!
0,+
A
0
4! 1!
C
3!
2! 1!
3! 0
0 Nuevo nodo
Nuevo nodo
4!
Ejemplo
Paso 2
Paso 1 1
0 13 0 10
1 21
0 18 24
-1 33
0 25 0 0 26
0 13 0 40
RDD
0 10
21
0 26
0 0 0 33 18 25 0 0 0 40 24 27
27
Agregar el 27
Observa que se forma una escuadra entre el nodo pivote y sus siguientes dos descendientes.
Hacer la Rotación Ajustar Factores de Balanceo
Proceso de Eliminación Eliminar el valor como se hace en un Árbol Binario de
Búsqueda. Una vez realizada la baja, realizar el proceso de verificación del balanceo del AVL. ¿Qué puede ocurrir?
La baja no provoca desbalanceo en el árbol, sólo hay
necesidad de ajustar algunos factores de balanceo. La baja sí provoca desbalanceo en el árbol, por lo que se deberá recuperar el balance a través de rotaciones.
Proceso de Eliminación Cuidado... La eliminación de un nodo puede provocar
un desbalanceo TOTAL en el AVL por este motivo, no existe un NODO PIVOTE ya que, en muchas ocasiones será necesario analizar a todos los ancestros del nodo borrado. El análisis para detectar un posible desbalanceo inicia en el padre del nodo recién eliminado. Si es necesario, una vez analizado el padre, sube al abuelo, y sigue hacia arriba, hasta que detecta que ya no hay problemas o bien, llega a la raíz del árbol.
Proceso de eliminación Cuando se analiza un nodo: Si tiene un FB = 0, NO hay desbalanceo. Se puede asegurar que hacia arriba ya no habrá problemas. Si tiene un FB <> 0 y se borró del subárbol más largo. NO hay desbalanceo, sin embargo se debe analizar hacia arriba porque cambió la altura. Si tiene un FB <> 0 y se borró del subárbol más corto. SÍ hay desbalanceo, hay que hacer ROTACIÓN y seguir analizando hacia arriba.
Ejemplo… A
0
Elemento borrado
A
+!
Dado que el Factor de Balanceo es 0 (las alturas de los subárboles es la misma), se elimina el nodo y termina la eliminación.
Ejemplo… A
+
Elemento borrado
A
0
Dado que se está borrando un nodo del subárbol más alto, no es necesario hacer una rotación.
Ejemplo… +
-
B A
0
1 2
3
+
A
B
0
3
1 2
Elemento borrado Dado que se está eliminando del subárbol más corto se debe hacer una Rotación.
Ejemplo… +
0
B A
1
2
+
3
0
1
A
B
0
2
3
Elemento borrado Dado que se está eliminando del subárbol más corto se debe hacer una Rotación.
Ejemplo +
0
B A 0
-
0,-
B
0,+
A
C
1! 2!
C
3!
Elemento borrado
4!
1!
2!
3!
Se hace una Rotación Doble cuando la simple no resuelve el problema.
4!
Estructura de Datos en memoria secundaria
Introducción Para almacenar muchos datos en disco, es necesario
una estructura de datos eficiente Los accesos al disco son costosos en tiempo por lo que se debe evitar realizar muchos accesos a los datos AVL es la mejor estructura para memoria principal, pero es ineficiente si se utiliza para almacenamiento secundario Esto se debe a la cantidad de accesos necesarios para
efectuar las rotaciones Otro problema es que se requieren tantos accesos como niveles se recorran en el árbol para efectuar la búsqueda
Árboles B Bayer y McCreight propusieron en 1970 esta
estructura Manejan árboles de búsqueda multicamino, cuyos nodos guardan más de un elemento Son árboles 100% balanceados en su estructura, lo cual repercute en búsquedas eficientes y en accesos mínimos a disco 10 20 5 8
25 65 92 99 12 18
CaracterísMcas del Árbol B Un Árbol B de orden n es aquel que: Todas las hojas del árbol están en el nivel inferior.
Cada nodo contiene entre n y 2n elementos, excepto
el nodo raíz, que puede tener entre 1 y 2n elementos.
Si un nodo tiene ‘m’ elementos, el nodo siempre
contendrá m + 1 hijos si no es un nodo hoja.
Ejemplo.... Para un Árbol B de orden 3: Cuántos elementos máximo puede guardar cada nodo del
árbol? 6
¿Cuántos elementos mínimo puede guardar cada nodo
del árbol?
1 si el la raíz, 3 cualquier otro nodo. ¿Cuántos hijos máximo puede tener un nodo? 7 ¿Cuántos hijos mínimo puede tener un nodo? 0 si es hoja, 2 si es raíz, 4 cualquier otro nodo.
Más caracterísMcas del Árbol B
Un árbol B de orden n es aquél en que:
Los elementos de un nodo están ordenados linealmente.
Los elementos están organizados de tal forma que se cumple la regla de la búsqueda: a la izquierda menores, a la derecha mayores. 10 20 5 8
25 65 92 99
12 18
Ejemplo... ¿De qué orden es este árbol B? 10 20 5 8
25 65 92 99
12 18
Este árbol es de orden 2 ya que puede almacenar hasta 4 elementos en cada nodo.
Proceso de Inserción Buscar el nodo hoja en donde se debería agregar el
elemento. Si hay espacio disponible en el nodo, agregar el elemento y terminar. Si el nodo hoja NO tiene capacidad de almacenar el elemento, se deberá crear un nuevo nodo al mismo nivel de la hoja y distribuir a los 2n+1 elementos de la siguiente forma: El nuevo nodo recibe a los ‘n’ elementos más grandes. El nodo existente se queda con los ‘n’ elementos más
pequeños. El elemento medio se insertará en el nodo padre siguiendo la misma lógica de inserción. En caso de no haber nodo padre, se creará un nuevo nodo que pasará a ser la nueva raíz.
Ejemplo... 10 20 5 8
25 65 92 99
12 18
Agregar el 4 10 20
Si hay espacio para el elemento, éste se agrega en el nodo. Los elementos están acomodados de menor a mayor.
4
5
8
25 65 92 99
12 18
Ejemplo... 10 20 5 8
25 65 92 99
12 18
Agregar el 56
Cuando el nuevo elemento no cabe en el nodo, se agrega otro nodo y se reparten los elementos.
10 20 65 4
5
8
12 18
92 99
25 56
Ejemplo... 10 20 65 4
5
8
12 18
70 75 80 85
25 56 Agregar el 78
El árbol siempre se resiste a crecer, ya que trata de distribuir los elementos en los nodos ya existentes.
10 20 70 4
5
8
12 18
75 78 80 85
25 56 65
Ejemplo 10 20 65 90 4 5 8 12 18
1 12 18
70 75 80 85 25 56 57 60
Agregar el 66
2
10 20 65 90
4 5 8
75
25 56 57 60
El árbol crece de abajo hacia arriba. Cuando el árbol aumenta de altura sólo se agrega una nueva raíz.
94 95
65 94 95
10 20
80 85 66 70
75 90
4 5 8 12 18 25 56 57 60
94 95 80 85 66 70
Proceso de Eliminación Buscar el elemento a borrar. Si el elemento a borrar está en una nodo hoja, se
borra y termina el proceso. Si el elemento a borrar no se encuentra en una hoja, al igual que en un ABB, se buscará al sustituto más apropiado. El sustituto será:
El último elemento de la hoja más derecha del subárbol
izquierdo del nodo actual (el mayor de los menores). El primer elemento de la hoja más izquierda del subárbol derecho del nodo actual (el menor de los mayores).
Ejemplo...
10 20 65 4
5
8
12 18
Cuando el nodo tiene más elementos que el mínimo, se da de baja al elemento y termina el proceso.
70 75 80 85
25 56
Eliminar el 8
10 20 65 4
5
12 18
70 75 80 85
25 56
Ejemplo...
10 20 65 4 5 8 12 18
Cuando el nodo tiene el mínimo se toma un elemento de los hermanos.
70 75 80 85
25 56
Eliminar el 56
10 20 70 4 5 8 12 18
75 80 85
25 65
Ejemplo...
10 20 65 4 5 8 12 18
70 75
Cuando el nodo tiene el mínimo y los hermanos también, se une el nodo con uno de sus hermanos y se libera el nodo sobrante.
25 56
Eliminar el 56
10 20 4 5 8 12 18
25 65 70 75
Ejemplo...
65 10 20
75 90
4 5 8
93 95
12 18
66 70
2
66 10 20
4 5 8 12 18 25 56 57 60
Utilizar el menor de los mayores
80 85
25 56 57 60
1
Eliminar el 65
10 20 66 90
90 93 95
70 75 80 85
4 5 8 12 18
93 95 70 75 80 85
25 56 57 60
65 10 20 60
93 95
4 5 8 12 18
61 62
25 56 57 58
1
4 5 8 12 18 25 56 57 58 61 62
Eliminar el 65 Utilizar el menor de los mayores
80 85 66 70
2
66 10 20 60
Ejemplo...
75 90
60
90 93 95 70 75 80 85
10 20 4 5 8 12 18 25 56 57 58
66 90 93 95 70 75 80 85
61 62
Resumiendo Arboles AVL son más eficientes que los ABB cuando
se trabaja en memoria interna porque se encuentran balanceados Para almacenamiento en disco deben utilizarse B-‐ Trees pues son más eficientes que los AVLs.