2010-01-19 17 views
7

Si Estoy insertando elementos: 10,12,14,1,6 min en un montón binario un artículo tras otro cómo serían los resultados parecerse, mi problema es el siguienteelementos de inserción en binario Montones Min

cuando inicio tengo:

10 

continuación

10 
/
12 

continuación

10 
/\ 
12 14 

continuación

1 
/\ 
10 14 
/
12 

pero esto no está bien, así que ¿cuál es la forma correcta de hacer eso?

Nota: esta es una pregunta para la tarea, estoy tratando de entender el concepto, si no se siente cómodo resolviendo la pregunta (de todos modos, no es la pregunta completa) proporcione un ejemplo con un problema similar.

Respuesta

17

Tienes que agregar el nuevo elemento como un niño (o una hoja exactamente) al montón (no como raíz), eso significa que lo pones en el primer lugar libre "derecho" (o en tu montón de matriz, solo al final).

Luego tiene que restablecer las condiciones del montón, esto se llama "heapify". Esto sucede en dos fases:

  1. intercambiar repetidamente el nuevo elemento (general: el elemento que viola las condiciones del montón) con su nodo padre con tal de que es más pequeño que el padre y no es la raíz.
  2. Intercambie repetidamente el nuevo elemento con el elemento secundario con el valor más pequeño, hasta que el nuevo elemento se convierta en un permiso o ambos nodos hijos sean más grandes que el elemento en sí.

Eso significa

10 
/\ 
12 14 

+ 1 conduce a

10 
/\ 
12 14 
/
1 

Y que viole las condiciones del montón, así que hay que heapify

10 
/\ 
    1 14 
/
12 

Pero esto no es todavía bien, entonces tienes que heapificar nuevamente

 1 
/\ 
10 14 
/
12 

y ya está ... todo bien ahora :-)

+0

pero 14 es más de 12, ¿cómo es que ordenó? – user220755

+0

Eso no infringe las condiciones del montón ... eche un vistazo a http://upload.wikimedia.org/wikipedia/commons/6/69/Min-heap.png 36 es mayor que 19, 7 es mayor que 2 y así sucesivamente – Leo

+0

O para aclarar: ¡su solución es correcta! Acabo de explicar cómo llegar algorítmico ... – Leo

2
step1:  10 
step2:  10 
     /
     12 
step3:  10 
     /\ 
     12 14 
step4:  1 
     /\ 
     10 12 
     /
     14 
step5:  1 
     /\ 
     6 10 
     /\ 
     12 14 
Cuestiones relacionadas