Hice una doble toma: en la práctica, la mayoría de los montones se implementan dentro de una matriz, por lo que no hay diferencia entre “usar una matriz y usar un montón”. Los montones son una de las muchas formas de administrar una matriz.
Quizás quiera decir “implementar una cola prioritaria como una matriz ordenada”, pero esto puede resultar en tiempos de procesamiento muy largos: la inserción de elementos en una matriz ordenada es [matemática] O (n) [/ matemática] en general, por lo que procesar n elementos puede ser tan malo como [matemáticas] O (n ^ 2) [/ matemáticas]. A menos que sepa que n será realmente pequeño, esto podría matar su algoritmo, ya que procesar la misma cantidad de elementos en un montón es [math] O (n log n) [/ math].
Honestamente, los algoritmos de almacenamiento dinámico ni siquiera son tan difíciles de implementar: la inserción, el pop y el almacenamiento dinámico solo deben ser unas pocas docenas de líneas de código. Y si está en C ++, ya se han escrito para usted: std :: make_heap, std :: push_heap y std :: pop_heap son parte de la biblioteca estándar. Aunque realmente, si tiene la biblioteca estándar, simplemente debe usar std :: priority_queue y terminar con ella.
- ¿Cuál es el propósito de estudiar pequeñas mejoras (como usar dos hilos o evitar la basura) mientras puedo reducir la complejidad de los algoritmos?
- ¿Cuáles son algunos diseños de clase mínima para el diseño de elevadores para la construcción de m pisos?
- ¿Cuáles son algunos algoritmos geniales que se pueden usar para el reconocimiento de objetos y cómo los usamos?
- ¿Cuál es la última actualización del algoritmo SEO de Google?
- ¿Contamos la estructura original dada mientras contamos el número total de isómeros?
Por cierto, la respuesta de Adrian Ho sobre “un número relativamente pequeño de prioridades” es absolutamente correcta si realmente tiene un número relativamente pequeño de prioridades. Y, en general, es muy común que su algoritmo particular tenga propiedades útiles que pueden explotarse para hacer que el código sea más simple y más eficiente. Mantenerse atento a tales propiedades es parte de ser un desarrollador eficaz. Sin embargo, si tiene una gran cantidad de prioridades, una gran cantidad de elementos, y necesita la capacidad de agregar nuevos elementos sobre la marcha antes de que se hayan consumido todos los actuales, lo que está buscando es una cola prioritaria. En ese caso, ser un desarrollador eficaz significa utilizar la función de cola de prioridad existente de su idioma, porque rara vez es una buena idea reinventar estructuras de datos comunes.