Inacap Temuco Inenier!a en inform"tica Análisis de algoritmos
Heapsort Ordenamiento por montculos
Nombre Alumno (s): Juan Cristóbal Cánovas Antivil Nombre Profesor: Oscar Fuentes Quiñilén Fecha: 30 de mayo de 2012
Introducción
La Ordenación de la información 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 ordenación, 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 clasificación- 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 descripción detalladas de muchos algoritmos de Ordenación interna y externa, introduciendo nuevos mtodos como la selección en .rbol4 por 5ltimo, el estudio de clasificación preparado por 6-7- 6avies en )*1+- $ partir de entonces se fueron descubriendo nuevos mtodos de clasificación8 c.lculo de dirección 9)*1+:, inserción por intercalación 9)*1*:, radix por intercambio 9)*1*:, clasificación por disminución 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 ordenación 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 extraSimplemente 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 posición 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 cómo 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 posición-
Ordenación en im.genes8
2stos procedimientos quedan explicados de me>or manera en la secuencia de im.genes, que muestra el e>emplo a continuación8 " 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 posición 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 continuación-
&-)-" 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 comparación 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 continuación-
&--" 2ste procedimiento se repite hasta que e l vector este lleno nuevamente-
<6ónde se usa= Heapsort se utiliza en la ordenación en arreglos, mediante .rbol binario-
'omparación de pares La siguiente tabla comparativa muestra tiempos de e>ecución 9en segundos de '?: para ordenar listas con distintos mtodos- Los programas est.n escritos en 3ortran *J, y se usó una computadora con procesador de %-K Hz- 6e velocidad con ) b- de memoria @$(Garias de las subrutinas usadas en esta implementación aparecen en A1B- ara 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- ara 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- ara 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>ecución 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 clasificación 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-
r.fico representativo de
$n.lisis del código
void heapsort ( int número [ ] , int tamanio_arreglo )
{
int i, temperatura;
para
( i = ( tamanio_arreglo / 2 ) ; i> = 0 ; i )
{
si!t"o#n ( números, i, $%%$&_'* + ) ;
para
( i = tamanio_arreglo + ; i> = + ; i )
{
/ / Cambio (reali-a inter.amios .on mtodo de s#ap)
temporal = número [ 0 ] ; los números [ 0 ] = número [ i ] ; números de [ i ] = temp;
si!t"o#n ( números, 0 , i + ) ;
void si!t"o#n ( int número [ ] , int rai-, int aa1o )
{
int ma3hild = root 4 2 5 + ;
/ / Buscar el mayor hijo
si ( ma3hild 6in!erior )
{
int other3hild ma3hild = 5 + ; / / invertido para la estabilidad
ma3hild = ( números [ other3hild ] > 7úmeros [ ma3hild ] ) other3hild8 ma3hild;
m9s
{
/ / No t desbordamiento
si ( ma3hild> aa1o )
de retorno ;
/ / Si tenemos el orden correcto, hemos terminado.
si ( los números [ root ] > = número [ ma3hild ] )
volver9 ;
/ / Intercambio
int temp = número [ ra:- ] ; número [ root ] = número [ ma3hild ] ; número [ ma3hild ] = temp;
/ / Cola de recursión de cola. Serán compilados como un lao con los interruptores de compilación adecuadas.
si!t"o#n ( números, ma3hild, aa1o ) ;
'onclusión
2n una constante b5squeda de la información, 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 información ordenada para su previo uso y con un comple>idad de O 9n log n:-