You are on page 1of 37

EDAs de Bsqueda y su Jerarqua Java

rbol AVL: definicin e implementacin

Karim Guevara Puente de la Vega


kguevara72@gmail.com UNSA, 2012

Objetivos

Introducir rbol Binario con Equilibrio Perfecto Introducir e implementar el TAD rbol Binario Equilibrado por altura Introducir e implementar el TAD rbol Binario Equilibrado por color de nodos

BST equilibrados

Caracterstica de BST

Ventaja: insercin, eliminacin y bsqueda O(logn)


n = nmero de niveles

Desventaja: se pierde eficiencia cuando h m y su complejidad


se iguala a la de las listas

m = nmero de nodos
h = altura del rbol

Solucin: hay que mantener el rbol equilibrado


Equilibrio perfecto
Otros tipos de equilibrio (AVL, arboles rojo-negros, etc.)

BST perfectamente equilibrados

Equilibrio perfecto

Para cada nodo, el nmero de nodos del subrbol izquierdo y el nmero de nodos del subrbol derecho difieren como mximo en 1 unidad

BST perfectamente equilibrados

BST perfectamente equilibrados: Algoritmo


Desplazar la mitad de nodos que sobran de un lado al otro. Mantener la condicin de BST al desplazar los nodos
Desplazar a derechas:
1. 2. 3.

Insertar la Raz en el subrbol derecho Colocar como Raz al mayor del subrbol izquierdo Repetir 1 y 2 tantas veces como el nmero de nodos a desplazar.

Desplazar a izquierdas: (simtrico)

Operaciones auxiliares:
equilibrar(NodoABB actual) desplazarDerecha(NodoABB actual, int cuantos) desplazarIzquierda(NodoABB actual, int cuantos)

Modificar algoritmos de insercin/borrado Re-equilibrado se hace desde arriba hacia abajo

rboles balanceados

Un rbol balanceado es un rbol binario de bsqueda, en el cual se debe cumplir la siguiente condicin: Para todo nodo T del rbol, la altura de los subrboles izquierdo y derecho no deben diferir en ms de una unidad

AVL BST equilibrados en altura

Adelson-Velkii & Landis Formulacin menos estricta y costosa que equilibrio perfecto Ligero deterioro del rendimiento medio de las bsquedas {BST perfectamente equilibrados} {rboles AVL}

AVL: definicin

Caractersticas de los AVL

Reequilibrado sencillo y eficiente Longitud del camino medio de bsqueda similar a la de los rboles perfectamente equilibrados Bsqueda, insercin y borrado ~ O(log n) Un AVL de altura h con el mnimo nmero de nodos se genera de manera similar a los nmeros de Fibonacci rbol de fibonacci:
El rbol vaco es rbol de fibonacci de altura 0 (A0) Un nico nodo es rbol de fibonacci de altura 1 (A1) Si Ah-1 y Ah-2 son rboles de fibonnacci de alturas h-1 y h-2, entonces Ah ::= < Ah-1, raz, Ah-2 > es fibonacci de altura h

n = nmero de nodos Altura mxima de un AVL


AVL: rbol de Fibonacci

10

OPERACIONES Insercin en rboles AVL

Al insertar en un rbol balanceado deben distinguirse los siguientes casos: 1. Las ramas izquierda (RI) y derecha (RD) del rbol tienen la misma altura (HRI = HRD), por tanto: 1.1 Si se inserta un elemento en RI entonces HRI ser mayor a HRD. 1.2 Si se inserta un elemento en RD entonces HRD ser mayor a HRI. No se viola el criterio de equilibrio o balanceo del rbol.
D
D

A CASO 1 11

C 1.1

1.2

Nodos opcionales, pueden no existir

OPERACIONES Insercin en rboles AVL


2. Las ramas izquierda (RI) y derecha (RD) tienen altura diferente (HRI HRD): 2.1 Suponga que HRI < HRD: 2.1.1 Si se inserta un elemento en RI entonces HRI ser igual a = HRD {Las ramas tiene la misma altura, por lo que se mejora el equilibrio del rbol} . 2.1.2 Si se inserta un elemento en RD entonces se rompe el criterio de equilibrio del rbol y es necesario reestructurarlo.
D
D

B B F B F

H H CASO 2.1. 12 A C 2.1.1

H
2.1.2. G I

Nodos opcionales, pueden no existir

OPERACIONES Insercin en rboles AVL


2.2 Suponga que HRI > HRD:
2.2.1 Si se inserta un elemento en RI entonces se rompe el criterio de equilibrio del rbol y es necesario reestructurarlo. 2.2.2 Si se inserta un elemento en RD entonces HRD ser igual a = HRI {Las ramas tiene la misma altura, por lo que se mejora el equilibrio del rbol} .
D C D D

F C F

F
A

A
CASO 2.2. 13 B 2.2.1.

2.2.2.

Nodos opcionales, pueden no existir

OPERACIONES Factor de equilibrio


-1

Permite determinar si un rbol est balanceado o no.

1 45

65

-1 70

FE = HRD - HRI

0
33

-1 54 0 50

0 68

Los valores que puede tomar FE son: -1,0,1. En otros casos debera reestructurarse el rbol.

14

OPERACIONES Reestructuracin del rbol AVL

Reestructura el rbol significa rotar los nodos del mismo. La rotacin puede ser simple o compuesta. El primer caso involucra 2 nodos y el segundo caso afecta a 3 SR (simple derecha)
Simple
SL (simple izquierda) Rotacin

DR (doble derecha) Compuesta DL (doble izquierda)


15

OPERACIONES Rotacin Simple Izquierda (SL)


-2 -1 C -1 0 B 0 0 A

0 B
0 C

16

OPERACIONES Rotacin Simple Derecha (SR)


21 A 0

1 0
B B

0 0
C A

0 C

17

OPERACIONES Rotacin Doble Izquierda (DL)


2 1 B -1 0 D 0 C 0 C

0
B

0 D

18

OPERACIONES Rotacin Doble Derecha (DR)


-2 -1 E

1 0
C

0 D

0 0
D C

0 E

19

EJEMPLO Rotacin Simple derecha: SR

20

EJEMPLO Rotacin Simple Izquierda: SL

21

EJEMPLO Rotacin Doble Derecha: DR

22

EJEMPLO Rotacin Doble Izquierda: DL

23

OPERACIONES Pasos para la insercin


1)

2)
3)

Seguir el camino de bsqueda del rbol, hasta localizar el lugar donde hay que insertar el elemento. Se inserta el elemento. Se re-calcula el FE de todos los nodos que componen el rbol. Si en alguno de los nodos se viola el criterio de equilibrio entonces debe reestructurarse el rbol.

24

IMPLEMENTACION Clase NodoAVL


template<class E> class NodoABB<E> { private: E data; // Dato almacenado en el nodo NodoABB<E> *left, *right; // Nodos hijo int fe; // factor equilibrio public: // Constructores NodoABB(E data, NodoAVL<E> *left =0, NodoAVL<E>* right=0){ this->data=data; this->left=left; this->right=right; this->fe=0; } };

25

IMPLEMENTACION Clase AVL


template<class E> class AVLType{ protected: NodoABB<E> *root; bool height; public: AVLType(); void insert(E x); void inOrder(); . . . protected: NodoABB<E>* insert(E , NodoABB<E> *); NodoABB<E>* balanceToRight(NodoABB<E> *); NodoABB<E>* balanceToLeft(NodoABB<E>*); NodoABB<E>* rotateSR(NodoABB<E> *); NodoABB<E>* rotateSL(NodoABB<E>*); void inOrder(NodoABB<E> *); Implementacin };

26

OPERACIONES Eliminar en un rbol AVL


Consiste en quitar un nodo del rbol sin violarlos principios que definen justamente un rbol balanceado. Se debe distinguir los siguiente casos:
1.

Si el elemento a borrar es terminal u hoja, simplemente se suprime.

2.

3.

Si el elemento a borrar tiene un solo descendiente, entonces tiene que sustituirse por ese descendiente. Si el elemento a borrar tiene los dos descendiente, entonces se tiene que sustituir por el nodo que se encuentra ms a la izquierda en el subrbol derecho o por el nodo que se encuentra ms a la derecha en el subrbol izquierdo .

27

OPERACIONES Pasos a seguir para eliminar un nodo

Localizar su posicin en el rbol. Eliminarlo siguiendo los criterios establecidos previamente. Regresar por el camino de bsqueda calculando el FE de los nodos visitados. Si en alguno de los nodos se viola el criterio de equilibrio, entonces debe reestructurarse el rbol. El proceso concluye una vez que se llega hasta la raz del rbol.

28

EJERCICIOS

Eliminar las siguientes claves del rbol balanceado de la figura: 82, 10, 39, 65, 70, 68 y 66 z

29

EJERCICIOS

30

EJERCICIOS

Eliminar la clave: 10

31

EJERCICIOS
Eliminar la clave: 39

32

EJERCICIOS

Eliminar la clave: 65

33

EJERCICIOS

Eliminar la clave: 70

34

EJERCICIOS

Eliminar la clave: 68

35

EJERCICIOS
inar la clave: 66

36

EJERCICIOS
in Final.

37

You might also like