Tabla de Contenidos
Tabla de Contenidos
Tabla de Contenidos
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
1.2. HEAPS 7<br />
Figura 1.3: Ejemplo <strong>de</strong> Heap<br />
Hasta ahora nuestra <strong>de</strong>finición <strong>de</strong> heap no se diferencia en nada <strong>de</strong> un árbol binario. Lo que<br />
caracteriza a un heap, es que el arreglo A cumple la propiedad <strong>de</strong> heap:<br />
A[P(i)] ≥ A[i] (1.1)<br />
En la figura 1.3 se muestra un ejemplo <strong>de</strong> un árbol binario semicompleto que cumple la propiedad<br />
<strong>de</strong> heap. La anterior propiedad nos dice que en el árbol que representa al heap, el valor asignado a<br />
un nodo es siempre mayor que sus dos hijos. Esta propiedad nos permite también, inmediatamente<br />
dar un procedimiento para obtener el valor máximo <strong>de</strong>ntro <strong>de</strong>l heap:<br />
Heap.Max()<br />
if π > 0<br />
then return A[0]<br />
else return nil<br />
El ejercicio 1 le pi<strong>de</strong> <strong>de</strong>mostrar que este procedimiento es correcto.<br />
Para implementar cada una <strong>de</strong> las operaciones básicas sobre un heap <strong>de</strong>bemos tener claro que,<br />
tanto antes como <strong>de</strong>spués <strong>de</strong> la aplicación <strong>de</strong> cada una <strong>de</strong> ellas, la propiedad <strong>de</strong> heap <strong>de</strong>be cumplirse.<br />
En lo que sigue estudiaremos cómo implementar las operación <strong>de</strong> inserción, y más a<strong>de</strong>lante cómo<br />
restaurar la propiedad <strong>de</strong> heap en un árbol semi-completo <strong>de</strong>ficiente (como heap) lo que nos permitirá<br />
implementar la operación <strong>de</strong> extracción.<br />
Inserción<br />
La operación <strong>de</strong> inserción en un heap se pue<strong>de</strong> hacer <strong>de</strong> una forma bastante simple. El siguiente<br />
trozo <strong>de</strong> código inserta el valor k en un heap.<br />
Heap.Insert(k)<br />
if π = µ<br />
then error “heap overflow”<br />
A[π] := k<br />
i := π<br />
while i > 0 ∧ A[i] > A[P(i)]<br />
do intercambia(A[i],A[P(i)])<br />
i := P(i)<br />
π := π + 1