Vous êtes sur la page 1sur 36

Algoritmos

y
Estructuras de Datos
Prof. Catalina Mostaccio
Prof. Alejandra Schiavoni
Facultad de Informtica - UNLP Cursada 2008
Colas de prioridad
Algoritmos y Estructuras de Datos 3
Agenda
Aplicaciones
Definicin
Distintas implementaciones
Heap Binaria
Propiedad Estructural
Propiedad de Orden
Implementacin
Operaciones: Insert, DeleteMin, Operaciones adicionales
Construccin de una Heap: operacin BuildHeap
Tiempo de Ejecucin
HeapSort
Algoritmos y Estructuras de Datos 4
Aplicaciones
Cola de impresin
Sistema Operativo
Algoritmos de Ordenacin
Algoritmos y Estructuras de Datos 5
Definicin
Una cola de prioridad es una estructura de datos
que permite al menos dos operaciones:
Insert
Inserta un elemento en la estructura
DeleteMin
Encuentra, recupera y elimina el elemento mnimo
Cola de
Prioridades
Insert DeleteMin
Algoritmos y Estructuras de Datos 6
Implementaciones
Lista ordenada
Insert tiene O(N)
DeleteMin tiene O(1)
Lista no ordenada
Insert tiene O(1)
DeleteMin tiene O(N)
rbol Binario de Bsqueda
Insert y DeleteMin tienen en promedio O(log N)
Algoritmos y Estructuras de Datos 7
Heap Binaria
Es una implementacin de colas de prioridad
que no usa punteros y permite implementar
ambas operaciones con un tiempo de O(log N)
en el peor caso
Cumple con dos propiedades:
Propiedad estructural
Propiedad de orden
Algoritmos y Estructuras de Datos 8
Propiedad estructural
Una heap es un rbol binario completo
En un rbol binario lleno de altura h, los nodos internos tienen
exactamente 2 hijos y las hojas tienen la misma profundidad
Un rbol binario completo de altura h es un rbol binario
lleno de altura h-1 y en el nivel h, los nodos se completan de
izquierda a derecha
Algoritmos y Estructuras de Datos 9
Propiedad estructural (cont.)
rbol binario lleno
rbol binario completo
Algoritmos y Estructuras de Datos 10
Propiedad estructural (cont.)
3 2
8
7
18 14 9
29
6
1
2
3
4
5 6
7
8 9
10
1
Ejemplo:
Algoritmos y Estructuras de Datos 11
Propiedad estructural (cont.)
El nmero de nodos n de un rbol binario
completo de altura h, satisface:
2
h
n (2
h+1
-1)
Demostracin:
Si el rbol es lleno, n= 2
h+1
-1
Si no, el rbol es lleno en la altura h-1 y tiene por lo menos
un nodo en el nivel h:
n= 2
h-1+1
-1+1=2
h
La altura h del rbol es de O(log n)
Algoritmos y Estructuras de Datos 12
Propiedad estructural (cont.)
Dado que un rbol binario completo es una
estructura de datos regular, puede almacenarse
en un arreglo, tal que:
La raz est almacenada en la posicin 1
Para un elemento que est en la posicin i:
El hijo izquierdo est en la posicin 2*i
El hijo derecho est en la posicin 2*i + 1
El padre est en la posicin i/2
Algoritmos y Estructuras de Datos 13
Propiedad estructural (cont.)
El rbol que vimos como ejemplo, puede almacenarse de la
siguiente manera:
3 2
8
7
18 14 9
29
6
1
2
3
4
5 6
7
8 9
10
1
1 3 2 8 7 29 6
1 2 3 4 5 6 7 8 9
18 14 9
10
Algoritmos y Estructuras de Datos 14
Propiedad de orden
MinHeap
El elemento mnimo est almacenado en la raz
El dato almacenado en cada nodo es menor o igual
al de sus hijos
MaxHeap
Se usa la propiedad inversa
Algoritmos y Estructuras de Datos 15
Implementacin de Heap
Una heap consta de:
Un arreglo que contiene los datos
Un valor que me indica el nmero de elementos
almacenados
Ventaja:
No se necesita usar punteros
Fcil implementacin de las operaciones
Algoritmos y Estructuras de Datos 16
Operacin: Insert
El dato se inserta como
ltimo tem en la heap
La propiedad de la heap
puede ser violada
Se debe hacer un
filtrado hacia arriba para
restaurar la propiedad de
orden
2
6 5
7 9
lugar de insercin
2
6 5
7 9 1
nodo nuevo
k
Algoritmos y Estructuras de Datos 17
Insert: Filtrado hacia arriba
(Percolate Up)
El filtrado hacia arriba restaura la propiedad de orden intercambiando k a lo
largo del camino hacia arriba desde el lugar de insercin
El filtrado termina cuando la clave k alcanza la raz o un nodo cuyo padre
tiene una clave menor
Ya que el algoritmo recorre la altura de la heap, tiene tiempo de ejecucin
de O(log n)
2
1 5
7 9 6
k
1
2 5
7 9 6
k
Algoritmos y Estructuras de Datos 18
Operacin: DeleteMin
Guardo el dato de la raz
Elimino el ltimo
elemento y lo almaceno en
la raz
Se debe hacer un filtrado
hacia abajo para restaurar la
propiedad de orden
30
20
80
1
2 3
4
10
30
20
1
2 3
80
30
80
1
2
3
20
10
ltimo
Algoritmos y Estructuras de Datos 19
DeleteMin: Filtrado hacia abajo
(Percolate Down)
Es similar al filtrado hacia arriba
El filtrado hacia abajo restaura la propiedad de orden
intercambiando el dato de la raz hacia abajo a lo
largo del camino que contiene los hijos mnimos
El filtrado termina cuando se encuentra el lugar
correcto dnde insertarlo
Ya que el algoritmo recorre la altura de la heap, tiene
tiempo de ejecucin de O(log n)
Algoritmos y Estructuras de Datos 20
Otras operaciones
DecreaseKey( x, , H )
Decrementa la clave que est en la posicin x de la heap H, en una
cantidad
IncreaseKey( x, , H )
Incrementa la clave que est en la posicin x de la heap H, en una
cantidad
DeleteKey( x )
Elimina la clave que est en la posicin x
Puede realizarse:
DecreaseKey( x,, H )
DeleteMin( H )
Algoritmos y Estructuras de Datos 21
Operacin: BuildHeap
Para construir una heap a partir de una lista de n
elementos:
Se pueden insertar los elementos de a uno
El tiempo de ejecucin es de O(n logn)
Usar un algoritmo de orden lineal:
Insertar los elementos desordenados en un rbol binario
completo
Filtrar hacia abajo cada uno de elementos
Algoritmos y Estructuras de Datos 22
BuildHeap
Para filtrar:
se elige el menor de los hijos
se compara el menor de los hijos con el padre
Se empieza filtrando desde el elemento que
est en la posicin (tamao/2):
se filtran los nodos que tienen hijos
el resto de los nodos son hojas
Algoritmos y Estructuras de Datos 23
BuildHeap
5 8 12 9 7 10 21
1 2 3 4 5 6 7 8 9
6 14 4
10
8 12
9
7
6 14 4
10
21
1
2
3
4
5 6
7
8 9
10
5
Filtrado hacia abajo
i = 5
Algoritmos y Estructuras de Datos 24
BuilHeap
8 12
9
4
6 14 7
10
21
1
2
3
4
5 6
7
8 9
10
5
i = 4
filtramos el 9
es heap
Algoritmos y Estructuras de Datos 25
BuildHeap
8 12
6
4
9 14 7
10
21
1
2
3
4
5 6
7
8 9
10
5
Son heaps
i = 3
filtramos el 12
Algoritmos y Estructuras de Datos 26
BuildHeap
1
filtrado
i = 2
10
12
21
3
6
7
5
8
6
4
9 14 7
2
4
5
8 9
10
4
6
8
9 14 7
2
4
5
8 9
10
4
6
7
9 14 8
2
4
5
8 9
10
Algoritmos y Estructuras de Datos 27
BuildHeap
4 10
6
7
9 14 8
12
21
1
2
3
4
5 6
7
8 9
10
5 i = 1
10
6
7
9 14 8
12
21
1
2
3
4
5 6
7
8 9
10
4
5
Algoritmos y Estructuras de Datos 28
Tiempo de ejecucin
En el filtrado de cada nodo recorremos su
altura
Para acotar el tiempo de ejecucin de la
operacin BuilHeap, debemos calcular la suma
de las alturas de todos los nodos
Algoritmos y Estructuras de Datos 29
Tiempo de ejecucin
Teorema:
En un rbol binario lleno de altura h que contiene 2
h+1
1 nodos, la
suma de las alturas de los nodos es: 2
h+1
1 (h + 1)
Demostracin:
Un rbol tiene 2
i
nodos de altura h i
S = 2
i
(h-i)
S = h + 2 (h-1) + 4 (h-2) + 8 (h-3) + 2
h-1
(1)
h
i=0
Algoritmos y Estructuras de Datos 30
Tiempo de ejecucin (cont.)
S = h + 2 (h-1) + 4 (h-2) + 8 (h-3) + 2
h-1
(1) (A)
2S = 2h + 4 (h-1) + 8 (h-2) + 16 (h-3) + 2
h
(1) (B)
Restando las dos igualdades (B) (A)
S = -h + 2 + 4 + 8 + 16 + + 2
h-1
+ 2
h
S + 1 = -h + 1 + 2 + 4 + 8 + 16 + + 2
h-1
+ 2
h
S + 1 = -h + (2
h+1
1)
S = (2
h+1
1) (h + 1)
Algoritmos y Estructuras de Datos 31
Tiempo de ejecucin (cont.)
Un rbol binario completo no es un rbol binario lleno,
pero el resultado obtenido es una cota superior de la suma
de las alturas de los nodos en un rbol binario completo
Un rbol binario completo tiene entre 2
h
y 2
h+1
- 1 nodos,
el teorema implica que esta suma es de O(n) donde n es el
nmero de nodos.
Este resultado muestra que la operacin BuilHeap es
lineal
Algoritmos y Estructuras de Datos 32
HeapSort
Algoritmo de ordenacin que usa una heap y es de O(n logn)
Dado un conjunto de N elementos se los quiere ordenar en
forma creciente.
Existen dos alternativas:
Construir una MinHeap, realizar N DeleteMin operaciones
e ir guardando los elementos extrados en otro arreglo.
Desventaja: requiere el doble de espacio
Algoritmos y Estructuras de Datos 33
HeapSort (cont.)
Construir una MaxHeap, intercambiar el ltimo elemento
con el primero, decrementar el tamao de la heap y filtrar
hacia abajo.
Ejemplo:
15
25
22
9
12
18
1
2
3
4
5 6
7
8
50
30
Algoritmos y Estructuras de Datos 34
HeapSort (cont.)
50 30 15 25 22 12 18
1 2 3 4 5 6 7 8
9
9 30 15 25 22 12 18
1 2 3 4 5 6 7 8
50
Intercambio el primero y el
ltimo y decremento el
tamao
15
25
22 12
18
1
2
3
4
5 6
7
9
30
Filtrar el 9
Algoritmos y Estructuras de Datos 35
HeapSort (cont.)
30 25 15 9 22 12 18
1 2 3 4 5 6 7 8
50
Despus de filtrar el 9 hacia
abajo
15
9
22 12
18
1
2
3
4
5 6
7
30
25
Algoritmos y Estructuras de Datos 36
HeapSort (cont.)
30 25 15 9 22 12 18
1 2 3 4 5 6 7 8
50
Intercambio el primero con
el ltimo y decremento el
tamao
15
9
22 12
1
2
3
4
5 6
18
25
18 25 15 9 22 12 30
1 2 3 4 5 6 7 8
50
Filtrar el 18