Académique Documents
Professionnel Documents
Culture Documents
Ciencias de la Computacin
Heapsort
Yuri Nuez Medrano *
ynunezm@gmail.com
Algorithm 1: MAX_HEAPIFY(A,i)
Figura 1: Array
1 l=LEFT(i)
2 r=RIGHT(i)
3 if l A.heapsize_size and A[l]>A[i] then completamente llenado con excepciones en el ultimo nivel,
4 largest=l como en la figura 1.
Los indices del arreglo contienen los valores de los nodos,
5 else largest=i;
como en la figura 2.
6 if r A.heapsize_size and A[r]>A[largest] then
Tenemos el array A, en el el que A.length: es el numero de
7 largest=r
elementos del array.
8 if largest 6= i then A.heap_size: es el tamao de elementos evaluados.
9 exchange A[i] with A[largest] El heapsize length
10 MAX_HEAPIFY(A,largest) Raiz: primer elemento A[1]
padre(i)=i/2
izquierdo(i)=2.i
derecho(i)=2.i+1
Algorithm 2: BUILD_MAX _HEAP(A) el indice de un nodo hijo es menor que el del padre.
1 A.heap_size=A.lenght La altura h es lgn como en la figura 3.
2 for i = bA.length/2c to 1 do
3 MAX_HEAPIFY(A,i) 1.1. Analisis de Heapify
Segun el algoritmo 1 podemos observar que esta compuesto
por resultados de variables y condicionales y una funcion
El la estructura de datos heap es un objeto array que puede
recursiva dentro de una condicional, por lo tanto de la linea
ser visto cercanamente como un arbol binario. Cada nodo
1 a la 7 ser constantes.
del arbol corresponde a un elemento del array. El arbol esta
El algoritmo 1 depende de dos datos A que es el array
* Escuela de Ciencias de la Computacin, 27-08-15 completo, e i, y dentro tambien depende de la variable
1
2
22 H-2
... ...
2H1 H-(H-1)=1
2H 0
A medida que avanza la linea 2 el bucle empieza en n/2
disminuyendo hasta 1. lo que cuando menor sea el i el padre
evaluara a mas nodos hijos. En un heap de en elementos, tie-
ne una altura deblgnc, y le numero de nodos en el monticulo
de altura h es dn/2h+1 e. Como se hace un llamado a Heapify
(A, i), para casi todo i su complejidad se puede medir como.
Pblgnc n Pblgnc h
h=0 d eO(h) = O(n h=0 h )
2h+1 2
Figura 2: Arbol binario Evaluamos la ltima sumatoria por la formula x = 1/2 de:.
P k x
k=0 kx = .
(1 x)2
para |x| < 1.
P h 1/2
h=0 d h e =
2 (1 1/2)2
=2
As podemos limitar la ejecucin de BUILD_MAX_HE
AP(A) como.
Pblgnc h P h
O(n h=0 h ) = O(n h=0 h )
2 2
Figura 3: Altura = O(n)
Algorithm 5: HEAP_EXTRACT_MAX(A)
1 if A.heap_size<1 then
2 error "heap underflow"
3 max = A[1]
4 A[1]=A[A.heap_size]
5 A.heap_size=A.heap_size-1
6 MAX_HEAPIFY(A,1)
7 return max
Algorithm 6: HEAP_INCREASE_KEY(A,i,key)
1 if key<A[i] then
2 error "new key is smaller than current key"
3 A[i]=key
4 while i>1 and A[PARENT(i)]<A[i] do
5 exchange A[i] with A[PARENT(i)]
6 i=PARENT(i)
Algorithm 7: MAX_HEAP_INSERT(A,key)
1 A.heap_size =A.heap_size+1
2 A[A.heap_size]=
3 HEAP_INCREASE_ KEY(A,A.heap_size,key)
Referencias
[H.Cormen et al., 2009] H.Cormen, T., Leiserson, C., and
Riverson, R. L. (2009). Algorithms. The MIT Press.