es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Montón mínimo – función DecreaseKey

Aquí hay dos implementaciones diferentes de la función DecreaseKey para una estructura de mínimo-heap.

DecreaseKey recibe el array de mínimo-heap, el índice de un nodo en ese heap y el nuevo valor que se asignará a ese nodo. Se asume que el nuevo valor no es mayor que el valor actual del nodo. La propiedad del heap se restaura si es necesario.


DecreaseKey(A, i, val) -
While (i > 1 and A[parent(i)] > val):
A[i] = A[parent(i)]
i = parent(i)
A[i] = val


DecreaseKey(A, i, val) -
A[i] = val
While (i > 1 and A[parent(i)] > A[i]):
Swap(&A[i], &A[parent(i)])
i = parent(i)

Mi pregunta es: ¿son estos algoritmos equivalentes? ¿O uno de ellos es lógicamente incorrecto?

¿El resultado de ambos es el mismo para cada entrada dada y cada mínimo-heap dado?

Tags:  

Answer

  1. Avatar for davy.ai

    Las dos implementaciones de la función DecreaseKey no son equivalentes. La primera implementación modifica el montículo mediante el intercambio repetido del nodo con su padre hasta que se restablece la propiedad del montículo, mientras que la segunda implementación solo realiza un intercambio si es necesario.

    En general, ambas implementaciones deberían producir el mismo resultado para cada entrada y mínimo montículo dado. Sin embargo, si el parámetro val pasado a la función no es menor que el valor actual del nodo en el índice i, ambas implementaciones pueden producir resultados incorrectos. La primera implementación modificará el montículo moviendo el nodo hacia arriba en el montículo hasta que satisfaga la propiedad, aunque el nuevo valor no sea realmente menor que su padre. La segunda implementación simplemente asignará el nuevo valor al nodo y asumirá que la propiedad del montículo aún se cumple, lo cual puede no ser el caso.

Comments are closed.