Вы находитесь на странице: 1из 12

Nombre Alumno (s): Juan Cristbal Cnovas Antivil

Nombre Profesor: Oscar Fuentes Quiiln


Fecha: 30 de mayo de 2012
Inacap Temuco
Inenier!a en inform"tica
Anlisis de algoritmos
Heapsort
Ordenamiento por montculos
Introduccin
La Ordenacin de la informacin de forma eficiente y eficaz es algo que se ha buscado por
muchos tiempo con el fin de obtener un menor tiempo de ociosidad de una programa de
ordenacin, pero no obstante en esta oportunidad podremos hablar de un en particular el
cual es HeapSort, entre los diversos que existen, mencionando un poco de historia,
funcionamiento y comparando el mtodo con otro de las mismas caracter!sticas
" HeapSort #$lgorithm %&%# en la revista #'ommunications of the $'(# en )*+,-
Se han hecho numerosos estudios sobre clasificacin- Los m.s relevantes son el de /-'-
Hos0en en )*11, el realizado por 2-H- 3riend en )*1+ titulado Sorting on 2lectronic
'omputer System con descripcin detalladas de muchos algoritmos de Ordenacin interna
y externa, introduciendo nuevos mtodos como la seleccin en .rbol-
4 por 5ltimo, el estudio de clasificacin preparado por 6-7- 6avies en )*1+- $ partir de
entonces se fueron descubriendo nuevos mtodos de clasificacin8 c.lculo de direccin
9)*1+:, insercin por intercalacin 9)*1*:, radix por intercambio 9)*1*:, clasificacin por
disminucin de Shell 9)*1*:, ;uic0sort de Hoare 9)*+%:, Heapsort de 7illiams 9)*+,:-
Lo mencionado da paso a explicar las dem.s caracter!sticas de este algoritmo en el presente
informe-
<'mo funciona HeapSort=
2s una algoritmo de ordenacin por mont!culo, es un .rbol equilibrado, binario y
>ustificado a la izquierda en el que ning5n nodo tiene un valor mayor que el valor de su
padre-
?n heap es un arreglo $ con valores- @epresenta un .rbol binario completo que cumple8
$Apadre9i:B $AiB y est. constituido de la siguiente forma8
" $A)B contiene la ra!z
" $A%iB y $A%iC)B contienen respectivamente los hi>os izquierdos y derechos de $AiB
$AiD%B contiene al padre de $AiB- Eodo camino de una ho>a a la ra!z es una secuencia
ordenada linealmente
Operaciones sobre un heap8
Insertar, ;uitar el mayor, @eemplazar elementos a un heap- Eodos estos requieren menos
de % logF comparaciones-

?n elegante y eficiente mtodo de ordenamiento sale de utilizar las operaciones sobre heap-
$dem.s no usa memoria extra-
Simplemente se construye un heap con los elementos a ordenar y despus se van quitando
en el orden- Heapsort entonces requiere menos de %FlogF comparaciones
?n heap tiene las siguientes tres propiedades8
2s completo, esto es, las ho>as de un .rbol est.n en a lo m.ximo dos niveles
adyacentes, y las ho>as en el 5ltimo nivel est.n en la posicin del extremo izquierdo-
'ada nivel en un heap es llenado en orden de izquierda a derecha-
2st. parcialmente ordenado, esto es, un valor asignado, llamado key del elemento
almacenado en cada nodo 9llamado primario:, es menor que 9mayor que: o igual a
las llaves almacenadas en los hi>os de los nodos izquierdo y derecho-
2l mtodo de ordenamiento procede de la siguiente manera8
# Golcar los datos de un vector en un mont!culo e ir comparando los valores con el fin
de que el valor m!nimo o m.ximo del arreglo 9dependiendo de cmo se quiera
ordenar: se posicione en la cima de este-
# Luego se toma el valor de la cima del mont!culo y se regresa al arreglo en la 5ltima
posicin-
Ordenacin en im.genes8
2stos procedimientos quedan explicados de me>or manera en la secuencia de im.genes, que
muestra el e>emplo a continuacin8
" La idea de este e>emplo es ordenar los valores de menor a mayor en el arreglo, por lo tanto
los valores se organizar.n sacando los valores mayores y ponindolos en la 5ltima posicin
del vector-
)-" 2stos ser.n los valores del vector con el que se traba>ar.-
%-" Se comienza a ingresar los datos en el mont!culo, un padre solo puede tener % hi>os-
&-" Se comparan el valor del nodo padre con el del nodo hi>o como se muestra en la imagen
a continuacin-
&-)-" 2n este caso no hay cambios ya que el valor del padre es mayor al del nodo hi>o, por
lo que se sigue con el procedimiento de ingreso de valores- 'on el nuevo nodo ingresado, al
igual como en el paso anterior se comparan los valores entre padre e hi>o-
&-%-" 'omo en el caso anterior, nuevamente no hay cambio, pero ahora seg5n el arreglo se
procede a ingresar un valor mayor, es decir, hay un cambio en el mont!culo-

&-&-" 4a que el nuevo nodo hi>o posee un valor mayor al nodo padre, se crea un
intercambio, quedando el nodo padre como nodo hi>o y el nodo hi>o como nodo padre-
Fuevamente se repite la comparacin con el valor de cima, pero ahora si existe un
intercambio-

&-,-" 2ste procedimiento se repite hasta que todos los valores estn ingresados en el
mont!culo-




&-1-" $l terminar de almacenar los datos se procede a reingresar los datos en el vector, y
rea>ustar los valores en el mont!culo-

&-+-" Luego de reposicionar el valor de los pies del mont!culo en la cima, se procede a hacer
las comparaciones para que el valor m.ximo quede en el tope nuevamente, esto se muestra
en la secuencia a continuacin-


&-H-" 2ste procedimiento se repite hasta que el vector este lleno nuevamente-







<6nde se usa=
Heapsort se utiliza en la ordenacin en arreglos, mediante .rbol binario-
'omparacin de pares
La siguiente tabla comparativa muestra tiempos de e>ecucin 9en segundos de 'I?: para
ordenar listas con distintos mtodos- Los programas est.n escritos en 3ortran *J, y se us
una computadora con procesador de %-K LHz- 6e velocidad con ) Lb- de memoria @$(-
Garias de las subrutinas usadas en esta implementacin aparecen en A1B- Iara n M )JJJJ, es
decir, una lista de )JJJJ elementos, los algoritmos shell, heapsort y quic0sort son tan
veloces que no se alcanza a percibir el tiempo que tarda- 'omo era de esperarse, el mtodo
m.s lento es bubble- Iara n M 1JJJJ y n M )JJJJJ las diferencias entre los mtodos
comienzan a ser m.s claras, siendo los m.s lentos bubble, selection e insertion, y los m.s
r.pidos shell, quic0sort y heapsort- Iara poder ver me>or las diferencias entre los mtodos
m.s r.pidos, aumentamos el n5mero de elementos de la lista 9notar que en el cuadro
comparativo no aparecen los tiempos de e>ecucin para los mtodos lentos pues estos
tiempos son enormes:- 'laramente observamos que el mtodo quic0sort es el m.s veloz,
seguido por el mtodo shell y heapsort-
Las listas de n5meros a ordenar fueron construidos utilizando un generador aleatorio de
n5meros reales-
Orden de comple>idad
" 2s conocido como el algoritmo de clasificacin tradicional-
" Heapsort siempre es O 9n log n:-
" ;uic0sort es por lo general O 9n log n:, pero en el peor de los casos reduce a O 9n%:-
" ;uic0sort es generalmente m.s r.pido, pero Heapsort es me>or en aplicaciones de tiempo
cr!tico-
" Heapsort es un algoritmo muy bueno-
Lr.fico representativo de
$n.lisis del cdigo
void heapsort ( int nmero [ ] , int tamanio_arreglo ) {
int i, temperatura;

para ( i = ( tamanio_arreglo / 2 ) ; i> = 0 ; i ) {
si!t"o#n ( nmeros, i, $%%$&_'()* + ) ;
,

para ( i = tamanio_arreglo + ; i> = + ; i ) {
/ / Cambio (reali-a inter.am/ios .on m0todo de s#ap)
temporal = nmero [ 0 ] ;
los nmeros [ 0 ] = nmero [ i ] ;
nmeros de [ i ] = temp;

si!t"o#n ( nmeros, 0 , i + ) ;
,
,

void si!t"o#n ( int nmero [ ] , int rai-, int a/a1o ) {
int ma23hild = root 4 2 5 + ;

/ / Buscar el mayor hijo
si ( ma23hild 6in!erior ) {
int other3hild ma23hild = 5 + ;
/ / invertido para la estabilidad
ma23hild = ( nmeros [ other3hild ] > 7meros [ ma23hild ] ) other3hild8 ma23hild;
, m9s {
/ / No t desbordamiento
si ( ma23hild> a/a1o ) de retorno ;
,
/ / Si tenemos el orden correcto, hemos terminado.
si ( los nmeros [ root ] > = nmero [ ma23hild ] ) volver9 ;

/ / Intercambio
int temp = nmero [ ra:- ] ;
nmero [ root ] = nmero [ ma23hild ] ;
nmero [ ma23hild ] = temp;

/ / Cola de recursin de cola. Sern compilados como un lao con los interruptores de
compilacin adecuadas.
si!t"o#n ( nmeros, ma23hild, a/a1o ) ;
,
'onclusin
2n una constante b5squeda de la informacin, con el fin de clarificar las dudas respectivas,
podemos acotar que podemos decir que un heap binario es correcto si y solo si los nodos
padre son siempre mayores a los nodos hi>os- @ecuerde que el heap binario es un .rbol
binario almacenado en un arreglo- 'on el fin de obtener informacin ordenada para su
previo uso y con un comple>idad de O 9n log n:-

Вам также может понравиться