ordenamiento1.pdf
TRANSCRIPT
-
Home Page
Title Page
Contents
JJ II
J I
Page 1 of 21
Go Back
Full Screen
Close
Quit
Analisis de Algoritmos deOrdenamiento y Seleccion
Profesor: Julio Cesar [email protected]
21 de octubre de 2003
-
Home Page
Title Page
Contents
JJ II
J I
Page 2 of 21
Go Back
Full Screen
Close
Quit
Problema de Ordenamiento
Entrada:
Sucesion de n numeros .
Salida:
Una permutacion (reordenamiento) de la entrada tal que:
a1a
2...a
n
Normalmente la sucesion sera representada por un arreglo de n elementos,o por una lista encadenada.
Si se ordenan numeros o grandes registros es irrelevante el metodoescogido:
registros
llave
datos
llave
datos
esto es lo que se mueve!!
Analizar el problema solo con numeros es suficientemente general
-
Home Page
Title Page
Contents
JJ II
J I
Page 3 of 21
Go Back
Full Screen
Close
Quit
Problemas de Ordenamientos
? Por insercion (Insertion Sort):
O(n2) Ordena in place: no requiere sino una cantidad constante deespacio adicional para ordenar.
? Por Mezclas (Merge Sort):
(n lg n) No ordena in place
? Heapsort :
O(n lg n) Ordena in place
? Quicksort :
(n2) Ordena in place Caso promedio : (n lg n)
-
Home Page
Title Page
Contents
JJ II
J I
Page 4 of 21
Go Back
Full Screen
Close
Quit
Problemas de Ordenamiento (Cont.)
InsertionSort, HeapSort, MergeSort, QuickSort: Son algorit-mos de ordenamiento basados en comparacion. Se puede demostrarque un algoritmo de ordenamiento basado en comparacion siemprees del orden (n lg n).
Se puede bajar esa cota? Si!!, pero no ordenando por comparacio-nes!!
? Por conteo.
? Radix Sort.
? BucketSort.
El problema de Seleccionar el i-esimo elemento:
? Ordenar y escoger: (n lg n)
? Se puede hacer en O(n).Algoritmo de ordenamiento por comparaciones:
? MergeSort O(n lg n).
? InsertionSort Ordena in place O(n2).
? Se toman las mejores caractersticas de los dos algoritmo de ordena-miento basados en comparacion (MergeSort, InsertionSort), paracrear un nuevo algoritmo llamado HeapSort.
-
Home Page
Title Page
Contents
JJ II
J I
Page 5 of 21
Go Back
Full Screen
Close
Quit
Montculos (Heaps)
? La estructura de datosMontculo es un arreglo de objectos que pue-de ser visto como un arbol binario con raz, cuyos nodos pertenecena un conjunto totalmente ordenado, y tal que cumple las siguientesdos propiedades:
Propiedad de orden: La raz de cada subarbol es mayor oigual que cualquiera de sus nodos restantes.
Propiedad de forma: La longitud de toda rama es h o h 1,donde h es la altura del arbol. Ademas, si una rama termina enuna hoja a la derecha de otra hoja, esta ultima de altura h 1,la primera debe ser de altura h 1.
Graficamente:
Fig 1: Representacion de un Montculo
-
Home Page
Title Page
Contents
JJ II
J I
Page 6 of 21
Go Back
Full Screen
Close
Quit
Montculos (Heaps)
a) b)
1 2 3 4 5 6 7 8 9 10
1
7
3
6
2
4
108 9
5
42
16
14 10
7 9 3
1
8 16 14 10 7 9 3 2 4 18
Fig 2: a) Arbol Binario b) Arreglo
-
Home Page
Title Page
Contents
JJ II
J I
Page 7 of 21
Go Back
Full Screen
Close
Quit
Montculos (Heaps)
Un arreglo A que representa un montculo es un objeto con 2 atri-butos:
Length [A]: numero de elementos en el arreglo.
Heap-size[A]: numero de elementos en el montculo almacenados den-tro de A
Aheapsize[A]
length [A]
A[1]
A[2] A[3]
A[4]
A[heapsize[A]]Fig 3: Representacion de un Montculo
A[1..heap size[A]] es el montculo representado.
-
Home Page
Title Page
Contents
JJ II
J I
Page 8 of 21
Go Back
Full Screen
Close
Quit
Montculos (Heaps)
Eficiencia de las operaciones sobre montculos:
Raz del arbol: A[1].
Padre (i) return b i2c.
Izq (i) return A[2i]
Der (i) return A[2i+ 1]Tanto Padre, Izq y Der pueden ser considerados operaciones basicas,del mismo costo.
Existen dos tipos de montculos binarios, los valores de los nodossatisfacen la propiedad de montculo.
max-heap : Para todo nodo 2 i heap-size[A], A[Padre(i)] A[i], entonces la raz es el mayor elemento del montculo (Heapsort).
min-heap : Para todo nodo 2 i heap-size[A], A[Padre(i)] A[i], entonces la raz es el menor elemento del montculo (Colas deprioridad).
La altura de un montculo de n elementos es (lg n).
-
Home Page
Title Page
Contents
JJ II
J I
Page 9 of 21
Go Back
Full Screen
Close
Quit
Montculos (Heaps)
A continuacion se describen los procedimientos que permiten orde-nar
in place,
y en tiempo O(n lg n), un arreglo de n elementos.Procedimientos para implementar una montculo.
Heapify toma tiempo O(lg n).Build-Heap toma tiempo O(n).HeapSort toma tiempo O(n lg n).Max-Heap-Insert, Heap-Extract-Max, Heap-Increase-Key yHeap-Maximum toman tiempo O(lg n) (Colas de prioridad).
-
Home Page
Title Page
Contents
JJ II
J I
Page 10 of 21
Go Back
Full Screen
Close
Quit
Propiedad de Montculo (Heap)
Como mantener la propiedad de orden?
? Supongamos que M es de la forma:
monton monton
no es necesariamenteun monton, pero tienela propiedad de forma
Como recuperar la propiedad de orden?
-
Home Page
Title Page
Contents
JJ II
J I
Page 11 of 21
Go Back
Full Screen
Close
Quit
Heapify
Heapify es una importante subrutina para manipular montculo.
{Pre: subarbol de raz Izq(i) y subarbol de raz Der(i) son montcu-los}.{Post: subarbol de raz i es un montculo}.Heapify(A, i)1 izq Izq(i)2 der Der (i)3 if izq heap-size[A] and A[izq] > A[i]4 then pos-max izq5 else pos-max i6 if der heap-size[A] and A[der]>A[pos-max]7 then pos-max der8 if pos-max 6= i9 thenA[i] A[pos-max]10 Heapify(A, pos-max)
El tiempo de ejecucion de Heapify se puede describir por la ecuacion derecurrencia:
T (n) T (2n3) + (1)
donde n es el numero de nodos del arbol.
-
Home Page
Title Page
Contents
JJ II
J I
Page 12 of 21
Go Back
Full Screen
Close
Quit
Heapify (Cont.)
Por ejemplo:
1
7
3
6
2
4
108 9
5
16
10
9 37
2 1
14
8
4
1
7
3
6
2
4
108 9
5
16
4 10
9 314 7
2 8 1
1
7
3
6
2
4
108 9
5
16
10
9 37
2 8 1
14
4
Por el metodo maestro
T (n) T (2n3) + (1) = O(n0 lg n) = O(lg n)
-
Home Page
Title Page
Contents
JJ II
J I
Page 13 of 21
Go Back
Full Screen
Close
Quit
Construccion de un Montculo
Como construir un montculo?
? Utilizando Heapify:
Build-Heap (A)1 Heap-size [A] length [A]2 for i b length [A]/2c down to 13 do Heapify (A, i)
Invariante de Ciclo :Al comienzo de cada iteracion del ciclo for entre las linea 2-3, cada nodoi+ 1, i+ 2, ...,n es la raz del montculo.Ejemplo:
4 1 3 2 16 9 10 14 8 7 A =
! ! !
! ! !
! ! !
! ! !
! ! !
" " " "
" " " "
" " " "
" " " "
" " " "
# # #
# # #
# # #
# # #
$ $ $ $
$ $ $ $
$ $ $ $
$ $ $ $
$ $ $ $
% % % %
% % % %
% % % %
% % % %
% % % %
& & & &
& & & &
& & & &
& & & &
& & & &
' ' '
' ' '
' ' '
' ' '
' ' '
1
7
3
6
2
4
108 9
heapify (A,5)
5
14 8
9 102
1 3
4
7
16 9 10
4
31
7
16 2
14 8
-
Home Page
Title Page
Contents
JJ II
J I
Page 14 of 21
Go Back
Full Screen
Close
Quit
Construccion de Montculo
! ! !
! ! !
! ! !
! ! !
" " " "
" " " "
" " " "
" " " "
" " " "
# # #
# # #
# # #
# # #
# # #
$ $ $ $
$ $ $ $
$ $ $ $
$ $ $ $
% % %
% % %
% % %
% % %
& & &
& & &
& & &
& & &
' ' '
' ' '
' ' '
' ' '
heapify (A,3)heapify (A,4)
2 8 7
1614 9 10
31
4
2 8 7
3
10
14
1
916
4
! !
! !
! !
! !
" "
" "
" "
" "
# #
# #
# #
# #
$ $
$ $
$ $
$ $
% %
% %
% %
% %
& &
& &
& &
& &
' '
' '
' '
' '
heapify (A,1)heapify (A,2)
2 8 1
14 7 9 3
16 10
4
2 4 1
8 7
14
9 3
10
16
-
Home Page
Title Page
Contents
JJ II
J I
Page 15 of 21
Go Back
Full Screen
Close
Quit
Construccion de Montculo
Analisis de Build-Heap:
SencilloCada llamada a Heapify cuenta O(lg n)Se hacen O(n) llamadosCosto total O(n lg n)Sin embargo es una cota muy amplia.
Mas exacto: Si el montculo tiene n nodos:
H = |_ lg n _|
# nodos altura1 H2 H-122 H-2
...2H1 H-(H-1)=1 2H 0
-
Home Page
Title Page
Contents
JJ II
J I
Page 16 of 21
Go Back
Full Screen
Close
Quit
Construccion de Montculo
En un montculo de n elementos su altura es blg nc y el numerode nodos en un montculo de altura h es dn/2h+1e.
Entonces, como Build-Heap hace un llamado a Heapify(A, i), pa-ra (casi) todo i, su complejidad se puede medir mas exactamentecomo:
blgnch=0
d n2h+1
eO(h) = O(nblgnch=0
h
2h)
= O(nn=0
h
2h)
= O(n)
(Recordar [(
i=o kxk = |x|
-
Home Page
Title Page
Contents
JJ II
J I
Page 17 of 21
Go Back
Full Screen
Close
Quit
HeapSort
El algoritmo HeapSort:
HeapSort (A)1 Build-Heap (A)2 For i length[A]down to 23 do exchange A[1] A[i]4 heap-size [A] heap-size [A] 15 Heapify (A, 1)
Invariante de Ciclo :Al comienzo de cada iteracion del ciclo for entre las linea 2-5, el subarregloA[1..i] es un montculo que contiene los i elementos pequenos de A[1..n] yel subarreglo A[i + 1..n] contiene los n i elementos mayores de A[1..n],ordenados.
Analisis de HeapSort:
O(n) construir
+(n 1)O(lg n) Ordenar
= O(n lg n) HeapSort
Que resultado da el hacer un analisis mas exacto como el de Build-Heap?
-
Home Page
Title Page
Contents
JJ II
J I
Page 18 of 21
Go Back
Full Screen
Close
Quit
HeapSort
Ejemplo:
10
8 9 3
16
14
4 12
7
42
7 9 3
14 10
8
16
1
A[1] A[10]
2
7 9 3
10
16
14
8
4
1 2
7 9 3
10
16
8
4
1
14
Heapify(A,1)
Heapify(A,1)
A[1] A[9]
A[1] A[8]
2
7 3
16
8
4
14
10
9
1
. . . . . . . . . . .
-
Home Page
Title Page
Contents
JJ II
J I
Page 19 of 21
Go Back
Full Screen
Close
Quit
Colas de Prioridad
? HeapSort es un excelente algoritmo, pero quickSort, en la practica,es el escogido. Sin embargo los montculos son muy utiles para im-plementar colas de prioridad.
? Una Cola de Prioridad es una estructura de datos con serviciosde insercion y retiro de elementos con base en una prioridad oprelacion asignada a cada elemento mediante una clave (un numeropor ejemplo). Por lo general se retira (se atiende) el elemento parael cual este numero es el maximo (maxima prioridad)
Las 3 operaciones basicas sobre colas de prioridad son:
Insert(C,x): Insertar el elemento x en la cola C.
Maximo(C): devuelve el elemento de C de maxima prioridad.
Retire-Max(C): retira y devuelve el elemento de maxima priori-dad de C.
? Aplicaciones:
Priorizar trabajos en un computador compartido. Simulador de manejador de eventos Administracion de Agendas !!
-
Home Page
Title Page
Contents
JJ II
J I
Page 20 of 21
Go Back
Full Screen
Close
Quit
Colas de Prioridad
El montculo es una estructura de datos para implementar esas ope-raciones:
Heap-Maximum(A) return A[1]
Tiempo de ejecucion: (1)
Heap Extract Max (A)1 if heap-size [A] < 12 then error Monton vacio3 Max A[1]4 A[1] A[heap-size[A]]5 heap-size [A] heap-size[A] 16 Heapify (A, 1)7 return Max
Tiempo de ejecucion: O(lg n)
-
Home Page
Title Page
Contents
JJ II
J I
Page 21 of 21
Go Back
Full Screen
Close
Quit
Colas de Prioridad (Cont.)
Heap Increase Key (A, i, clave)1 if clave < A[i]2 then error La nueva clave es menor que la actual clave3 A[i] clave4 while i > 1 and A[padre(i)] < A[i]5 do exchange A[i] A[padre(i)]6 i padre(i)
Tiempo de ejecucion : O(lg n)
Max-Heap Insert (A, clave)1 heap-size [A] heap-size[A] + 12 A[heap-size[A]] 3 Heap Increase Key (A, heap size[A], clave)
Tiempo de ejecucion : O(lg n)Tiempo total es : O(lg n)