Saltar al contenido

Modelo por capas

Subir

Para insertar x en un min-heap:

  1. Ponerlo al final del array (el árbol sigue completo).
  2. Subir: mientras x sea menor que su padre, intercambiarlos.

Solo el camino de x hacia la raíz puede romper el invariante, así que solo se revisa ese camino: como mucho la altura, O(log n) intercambios.

Un ejemplo: el heap [3, 6, 5, 9, 8], al que se añade 4. Cada dibujo muestra el árbol (arriba) y el array (abajo).

Subir un valor, paso 1 de 3Heap 3, 6, 5, 9, 8 con el 4 recién puesto al final, en la posición 5. El 4 y su padre 5, en la posición 2, tienen borde grueso: se comparan.365984306152938445
Paso 1 de 3. Se añade 4 al final (posición 5). Su padre es la posición (5 − 1) / 2 = 2, que vale 5. 4 es menor que 5: se intercambian.
Subir un valor, paso 2 de 3El array es ahora 3, 6, 4, 9, 8, 5. Las posiciones 2 (valor 4) y 5 (valor 5) están marcadas como cambiadas.364*985*30614*293845*5
Paso 2 de 3. Tras el intercambio, 4 está en la posición 2 y 5 en la posición 5.
Subir un valor, paso 3 de 3El mismo array 3, 6, 4, 9, 8, 5. El 4, en la posición 2, y su padre 3, en la posición 0, tienen borde grueso: se comparan.364985306142938455
Paso 3 de 3. 4 se compara con su nuevo padre, 3. 4 no es menor que 3: no hay intercambio y subir termina.

Borde grueso: lo que se compara. Relleno con asterisco: lo que acaba de cambiar.

Texto
función subir(a, i):    mientras i > 0 y a[i] < a[(i − 1) / 2]:        intercambiar a[i] y a[(i − 1) / 2]        i ← (i − 1) / 2
En el heap [2, 5, 3, 9, 7, 8] insertas el valor 1. ¿Qué secuencia de estados sigue el array?