Arboles balanceados

Page 1

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.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.