programación 3: árboles de búsqueda equilibrados

28
TEMA: ARBOLES DE BUSQUEDA EQUILIBRADOS. ESTUDIANTE: JEFFERSON ARIAS. UNIVERSIDAD DE CUENCA

Upload: angel-vazquez-patino

Post on 26-Jan-2017

70 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Programación 3: árboles de búsqueda equilibrados

TEMA: ARBOLES DE BUSQUEDA EQUILIBRADOS.ESTUDIANTE: JEFFERSON ARIAS.

UNIVERSIDAD DE CUENCA

Page 2: Programación 3: árboles de búsqueda equilibrados

Contenidos.• Eficiencia de la búsqueda en un árbol ordenado.• Árbol binario equilibrado, Arboles AVL. • Inserción en árboles de búsqueda equilibrados:

rotaciones. • Borrado de un nodo en un árbol equilibrado. • Implementación de la operación inserción con

balanceo, busqueda y rotaciones en java. • Conclusiones.

Page 3: Programación 3: árboles de búsqueda equilibrados

Introducción.

• El árbol AVL toma su nombre de las iniciales de los apellidos de sus inventores, Georgii Adelson-Velskii y Yevgeniy Landis. Lo dieron a conocer en la publicación de un artículo en 1962.

• Los árboles AVL están siempre equilibrados de tal modo que para todos los nodos, la altura de la rama izquierda no difiere en más de una unidad de la altura de la rama derecha o viceversa.

Page 4: Programación 3: árboles de búsqueda equilibrados

Eficiencia de la búsqueda en un árbol ordenado.• La eficiencia de una búsqueda en un árbol binario

ordenado varía entre O(n) y O(log(n)), dependiendo de la estructura que presente el árbol.

Árbol Degenerado Árbol Equilibrado de Búsqueda

Page 5: Programación 3: árboles de búsqueda equilibrados

Eficiencia de la búsqueda en un árbol ordenado.• En los árboles de búsqueda, el número promedio de

comparaciones que deben realizarse para las operaciones de inserción, eliminación y búsqueda varía entre Log₂(n), para el mejor de los casos y n para el peor de los casos.

• Para optimizar los tiempos de búsqueda en los árboles ordenados surgen los árboles casi equilibrados, en los que la complejidad de la búsqueda es logarítmica, O(Log n)).

Page 6: Programación 3: árboles de búsqueda equilibrados

Árbol binario equilibrado, Arboles AVL. • Un árbol totalmente equilibrado se caracteriza porque la altura de

la rama izquierda es igual que la altura de la rama derecha para cada uno de los nodos del árbol.

• La estructura de datos de árbol equilibrado que se utiliza es la del árbol AVL. Son árboles ordenados o de búsqueda que, además, cumplen la condición de balanceo para cada uno de los nodos.

Árbol Equilibrado Árbol no Equilibrado

Page 7: Programación 3: árboles de búsqueda equilibrados

Definición Árbol AVL.• Un árbol equilibrado o árbol AVL es un árbol binario de

búsqueda en el que las alturas de los subárboles izquierdo y derecho de cualquier nodo difieren como máximo en 1.

• La altura o profundidad de un árbol binario es el nivel máximo de sus hojas más uno. La altura de un árbol nulo se considera cero.

• 0 cuando son iguales.• 1 cuando altura derecho > izquierdo.• -1 cuando altura izquierdo > derecho.

Page 8: Programación 3: árboles de búsqueda equilibrados

Altura de un Árbol Equilibrado, Árbol AVL.• No resulta fácil determinar la altura promedio de un árbol

AVL, por ello se determina la altura en el peor de los casos, es decir, la altura máxima que puede tener un árbol equilibrado con un número de nodos n. La altura es un parámetro importante ya que coincide con el número de iteraciones que se realizan para bajar desde el nodo raíz al nivel mas profundo de las hojas.

• El árbol equilibrado de n nodos menos denso tiene como altura (1.44*log (n)), donde n es el número de nodos en el peor de los casos del árbol AVL de altura h y se puede afirmar que la complejidad de una búsqueda es O(Log n).

Page 9: Programación 3: árboles de búsqueda equilibrados

Inserción en árboles de búsqueda equilibrados: rotaciones. • Los árboles equilibrados, árboles AVL, son árboles de búsqueda y, por

consiguiente, para añadir un elemento se ha de seguir el mismo algoritmo que en dichos árboles de búsqueda. Se compara la nueva clave con la clave del raíz, continúa por la rama izquierda o derecha según sea menor o mayor y termina insertándose como nodo hoja.

• Inserción de la clave 17.

Antes de la Inserción Después de la Inserción

Page 10: Programación 3: árboles de búsqueda equilibrados

• Una inserción de una nueva clave, o un borrado, puede destruir el criterio de equilibrio de varios nodos del árbol. Se debe recuperar la condición de equilibrio del árbol antes de dar por finalizada la operación para que el árbol siga siendo equilibrado.

Árbol AVL

Árbol Desequilibrado

Page 11: Programación 3: árboles de búsqueda equilibrados

Rotaciones.• Para corregir el factor de equilibrio de un nodo, se realiza

sobre él una rotación simple o doble. Rotaciones: secuencia de rotaciones de punteros que se intercambian cíclicamente (por medio de ciclos).

• Un hecho muy importante de estas rotaciones, es que se mantiene el ordenamiento del árbol, si el árbol original era ABB, el resultado también lo seguirá siendo.

• El factor de equilibrio es la diferencia entre las alturas del árbol derecho y el izquierdo:

• FE = altura subárbol derecho - altura subárbol izquierdo• Por definición, para un árbol AVL, este valor debe ser -1, 0 ó

1, si sobrepasa este valor es necesario requilibrar.

Page 12: Programación 3: árboles de búsqueda equilibrados

Rotaciones Simples.• Si el nodo está desequilibrado a la izquierda (FE < –1), y su

hijo izquierdo tiene el mismo signo (–) hacer rotación simple a la derecha.

Page 13: Programación 3: árboles de búsqueda equilibrados

Rotaciones Simples.• Si el nodo está desequilibrado a la derecha (FE > +1), y su

hijo derecho tiene el mismo signo (+) hacer rotación simple a la izquierda.

Page 14: Programación 3: árboles de búsqueda equilibrados

Rotaciones Dobles.• Si el nodo está desequilibrado a la izquierda (FE < –1), y su

hijo izquierdo tiene distinto signo (+) hacer rotación doble izquierda-derecha.

Page 15: Programación 3: árboles de búsqueda equilibrados

Rotaciones Dobles.• Si el nodo está desequilibrado a la derecha (FE > +1), y su

hijo derecho tiene distinto signo (–) hacer rotación doble derecha-izquierda.

Page 16: Programación 3: árboles de búsqueda equilibrados

Eliminación de un Nodo.• Al eliminar un nodo en un árbol AVL puede afectar el

equilibrio de sus nodos. Entonces hay que hacer rotaciones simples o dobles.

• Para eliminar un nodo primero localizamos el nodo que queremos eliminar y realizamos lo siguiente:

A) Si el nodo es un nodo hoja, simplemente lo eliminamos.B) Si el nodo solo tiene un hijo, lo sustituimos con su hijo.C) Si el nodo tiene dos hijos, lo sustituimos por el hijo derecho y colocamos el hijo izquierdo en el subárbol izquierdo del hijo derecho.

Page 17: Programación 3: árboles de búsqueda equilibrados

Ejemplo literal A y B.

Page 18: Programación 3: árboles de búsqueda equilibrados

Ejemplo literal C.

Page 19: Programación 3: árboles de búsqueda equilibrados

Implementación de Inserción.

Page 20: Programación 3: árboles de búsqueda equilibrados
Page 21: Programación 3: árboles de búsqueda equilibrados
Page 22: Programación 3: árboles de búsqueda equilibrados
Page 23: Programación 3: árboles de búsqueda equilibrados

Implementación de Rotaciones.

Page 24: Programación 3: árboles de búsqueda equilibrados
Page 25: Programación 3: árboles de búsqueda equilibrados

Rotaciones Dobles.

Page 26: Programación 3: árboles de búsqueda equilibrados

Implementación de Búsqueda.

Page 27: Programación 3: árboles de búsqueda equilibrados

Conclusiones• El factor equilibrio en estos arboles es una de las

características mas importantes debido a que ayuda a mantener a el árbol organizado de una mejor manera.

• Los arboles de búsqueda equilibrado pueden ser muy útiles y eficientes al momento de realizar una búsqueda con respecto a los arboles binarios ya que al estar el árbol ordenado el algoritmo de búsqueda sabe que camino tomar y consultar si el nodo buscado existe o no.

Page 28: Programación 3: árboles de búsqueda equilibrados

Bibliografía.Hidalgo, S. (12 de Septiembre de 2012). Prezi. Obtenido de: https://prezi.com/npobbmtpep5t/arboles-avl/Joyanes Aguilar, L., Zahonero Martinez, l., 2008. Estructuras de datos en Java. McGraw-Hill, Madrid, España.Solar, M. (2010). Estructuras de Datos. Obtenido de: http://www.ramos.utfsm.cl/doc/860/sc/ED_Cap5AVL.pdf