Documento sobre los arboles B sobre funcionamiento y que sonDescripción completa
x
Estructura de Datos
Clase 14: Colas de prioridad – Heaps Binarios Binarios Ingenie Ing enierr´ıa en Comp Computac utaci´ i´ on e In on Infor form´ m´ atica atic a
x
Tabla de contenidos
1
Introducci´ on on
2
Heap
3
Operacioness del Heap Operacione
4
Otros Heaps
5
Heapsort
x
Tabla de contenidos
1
Introducci´ on on
2
Heap
3
Operacioness del Heap Operacione
4
Otros Heaps
5
Heapsort
x
Introducci´ on on
Una cola de prioridad es un tipo de datos abstracto que almacena un conjunto de datos que poseen una llave perteneciente a alg´ un un conjunto ordenado. Permite insertar nuevos elementos y extraer el m´ aximo aximo (o el m´ınimo, en caso de que la estructura se organice con un criterio de orden inverso). Numerosas aplicaciones: Sistemas operativos, algoritmos de scheduling, gesti´ on de colas en cualquier ambiente, etc. on
x
Introducci´ on
La implementaci´ on m´as eficiente es a trav´es de heap .
Heap significa, literalmente, “mont´ on”.
La principal caracter´ıstica e importancia del Heap es que se puede obtener el m´ınimo elemento en tiempo constante O(1).
x
Heap Caracter´ısticas
1
Propiedad estructural:
´ Es un Arbol Binario Completo. Propiedades:
2
Su altura es a lo sumo ( log n). Admite una representaci´ on impl´ıcita sobre un arreglo.
Propiedad de orden:
El valor de cualquier nodo es menor o igual que el de sus hijos (Min- Heap ). De manera an´ aloga se define un Max- heap .
x
Heap Caracter´ısticas
Un heap es un AB completo con la propiedad de orden enunciada.
Propiedades:
´ Arbol binario perfectamente balanceado. Todas las ramas del ´ arbol son secuencias ordenadas. La ra´ız del ´ arbol es el nodo de valor m´ınimo (o m´ aximo en un Max- Heap ). Todo sub´arbol de un Heap es tambi´ en un Heap . (no obligatorio): es “izquierdista”, o sea, el ´ultimo nivel est´ a lleno desde la izquierda. (Ojo: ¡no es un ABB, ni una estructura totalmente ordenada!)
x
Heap Representaci´ on
Todas las representaciones usadas para ´arboles binarios son admisibles.
Representaci´ on con punteros, eventualmente con punteros hijo-padre.
Representaci´ on con arreglos: particularmente eficiente.
x
Heap Representaci´ on : Arreglos
Ventajas:
Muy eficientes en t´ erminos de espacio (¡ver desventajas!). Facilidad de navegaci´on.
Desventaja:
Implementaci´ on est´ atica (puede ser necesario duplicar el arreglo (o achicarlo) a medida que se agregan/eliminan elementos.
x
Heap Representaci´ on : Arreglos
on en el arreglo. i = posici´ Hijo Izquierdo = 2i. Hijo Derecho = 2i + 1. Padre = (int)i/2.
13 1
21 2
16 3
24 4
31 5
19 6
68 7
65 8
26 9
32 10
x
Operaciones del Heap Insertar
Insertar en la posici´ on correspondiente para que siga siendo un ´ arbol completo, es decir, al final de izquierda a derecha. Reorganizar para que cumpla las condiciones del heap , haci´endolo flotar:
Comparar con el nodo padre: si no cumple las condiciones del ´ arbol m´ınimo/m´aximo, entonces intercambiar ambos.
x
Operaciones del Heap Insertar : Ejemplo
13 1
21 2
16 3
24 4
31 5
19 6
68 7
65 8
26 9
32 10
14 11
x
Operaciones del Heap Insertar : Ejemplo
13 1
21 2
16 3
24 4
14 19 5 6
68 7
65 8
26 9
32 10
31 11
x
Operaciones del Heap Insertar : Ejemplo
13 1
14 16 2 3
24 4
21 5
19 6
68 7
65 8
26 9
32 10
31 11
x
Operaciones del Heap Eliminar
´ Se elimina m´ınimo/m´aximo elemento. Este est´a en la posici´on 1 de arreglo y ra´ız del ´ arbol. El u ´ltimo nodo lo colocaremos en la posici´ on uno, y lo hundiremos Se hunde en la direcci´ on del hijo menor para mantener la propiedad de orden.
x
Operaciones del Heap Eliminar : Ejemplo
13 14 1 2
16 3
19 4
21 5
19 6
68 7
65 8
26 9
32 10
31 11
x
Operaciones del Heap Eliminar : Ejemplo
31 14 1 2
16 3
19 4
21 5
19 6
68 7
65 8
26 9
32 10
11
x
Operaciones del Heap Eliminar : Ejemplo
14 1
31 16 2 3
19 4
21 5
19 6
68 7
65 8
26 9
32 10
11
x
Operaciones del Heap Eliminar : Ejemplo
14 1
19 2
16 3
31 21 4 5
19 6
68 7
65 8
26 9
32 10
11
x
Operaciones del Heap Eliminar : Ejemplo
14 1
19 2
16 3
26 4
21 5
19 6
68 7
65 8
31 9
32 10
11
x
Operaciones del Heap Eficiencia de las Operaciones
Operaciones Acceder Buscar Insertar Eliminar
Arreglo Est´a tico
Arreglo Din´ a mico
O(1)
O(1)
O(n)
O(n)
– –
O(n) O(n)
Lista Simplemente Enlazada O(n) O(n) O(1) O(1)
Lista Doblemente Enlazada O(n) O(n) O (1) O (1)
´ Arbol Binario Heap de B´ u squeda Binario O (log n) O (log n) O (log n) O (log n)
– O(1) O(log n) O(log n)
x
Otros Heaps Eficiencia
Heap
Binario Binomial Fibonacci
Buscar M´ın/M´ax O(1) O (log( n)) O(1)
(*)Tiempo Amortizado.
Extraer M´ın/M´ax O (log( n)) O (log( n)) O (log( n))*
Dism./Aum. Clave O(log(n)) O(log(n)) O(1)*
Insertar
Eliminar
Mezclar
O(log(n))
O(log(n))
O ( m + n)
O(log(n))
O(log(n))
O(log(n))
O (1)
O(log(n))*
O(1)
x
Heapsort Funcionamiento
A partir de un arreglo desordenado que se quiere ordenar ascendentemente:
Para i = n/ 2 hasta 1:
Hundir i.
Para i = n hasta 2:
Intercambiar posici´ on 1 con i. Hundir i.
x
Heapsort Ejemplo
1 19
2 5
3 18
4 2
5 3
6 23
7 16
x
Heapsort Ejemplo
Hundir i = 3.
x
Heapsort Ejemplo
Hundir i = 2.
x
Heapsort Ejemplo
Hundir i = 1.
x
Heapsort Ejemplo
Intercambiar 1 con 7.
Hundir ra´ız (i = 0).
x
Heapsort Ejemplo
Intercambiar 1 con 6.
Hundir ra´ız (i = 0).
x
Heapsort Ejemplo
Intercambiar 1 con 5.
Hundir ra´ız (i = 0).
x
Heapsort Ejemplo
Intercambiar 1 con 4.
Hundir ra´ız (i = 0).
x
Heapsort Ejemplo
Intercambiar 1 con 3.
Hundir ra´ız (i = 0).
x
Heapsort Ejemplo
Intercambiar 1 con 2.
Hundir ra´ız (i = 0).
x
Heapsort Ejemplo
x
Heapsort Eficiencia
La eficiencia para un algoritmo Heapsort est´a dominado por el ordenamiento hacia abajo O(n log n) y no por la construcci´ on O(n). Heapsort garantiza ordenar n elementos en su lugar en un tiempo proporcional a n log n sin importar la entrada. No hay entrada de peor caso que haga el algoritmos Heapsort significativamente m´ as lento (como es el caso de Quicksort).