¿Un montón necesita usar una cola prioritaria?

Esto puede tener un pequeño problema con la palabra “montón” utilizada para dos cosas diferentes en la programación: la estructura de datos organizada (basada en un árbol de búsqueda binario) donde los elementos considerados más altos en un orden de clasificación se colocan más arriba de un árbol (para un máximo -apilado, al revés para un montón mínimo). O es el área de RAM de la cual las asignaciones dinámicas extraen sus espacios libres.

Sin embargo, en ambos casos: creo que su pregunta debería ser cambiada. Una cola prioritaria se construye en un montón (o al menos esa es una implementación). Es decir, la pregunta debería ser más bien: “ ¿Una cola prioritaria necesita usar un montón?

Y la respuesta es … No … puede usar uno, pero igualmente podría implementarse de otra manera. Es solo que un montón (el tipo de estructura de datos) tiende a ser la forma más fácil de implementar una cola de prioridad razonablemente rápida. Y también el montón (asignación dinámica) tiende a facilitar la implementación de cualquier tipo de estructura de árbol, especialmente si su tamaño puede crecer / reducirse mucho. Se puede usar una matriz asignada estáticamente en la pila, pero requiere un poco de previsión (al menos hasta el punto de elegir un número máximo de elementos para la cola). Sin mencionar que algunas de las otras formas de colas prioritarias usan estructuras ubicadas más fácilmente dentro de una matriz asignada estática.

No entiendo tu pregunta, así que responderé 2 preguntas relacionadas.

  1. ¿Necesita usar un montón para implementar una cola prioritaria? La respuesta es no. Puede implementar una cola de prioridad con un vector o una lista u otras cosas, pero todas las operaciones de cola de prioridad se ejecutan en tiempo [matemático] \ Theta (\ log n) [/ matemático] si usa un montón, mientras que algunas de las operaciones (como pop ()) se ejecutarán en tiempo [matemático] O (n) [/ matemático] si usa un vector.
  2. ¿Es un montón solo bueno para implementar colas prioritarias? La respuesta es no. Muchos algoritmos gráficos (como el algoritmo de árbol de expansión mínimo Prim) usan un montón para realizar un seguimiento de los bordes candidatos. También puede usar un montón para algoritmos de selección (como encontrar la mediana).

Si quiere decir un montón “binario”, entonces ese es un método para implementar una cola prioritaria.

Un montón binario se puede implementar usando una matriz o usando un árbol binario.