¿Por qué se utiliza la ordenación del montón?

Otros han indicado que rara vez se utiliza la ordenación del montón, pero eso no es necesariamente cierto. Puede que no sea tan útil para ordenar un conjunto fijo de elementos, pero es esencial para muchos algoritmos en los que desea mantener los elementos para extraer el mínimo o el máximo. Primero, por qué no es útil en muchas situaciones. Considere el siguiente conjunto de números:

[2,4,5,1,6,7,9,3,14,10,15,17,8]

Si realiza una ordenación rápida in situ en este conjunto, obviamente obtendrá [1,2,3,4,5,6,7,8,9,10,14,15,17]. Uno de los principales casos de uso de ordenar un conjunto de elementos es hacer una búsqueda rápida utilizando la búsqueda binaria. Una vez que se realiza la ordenación rápida en el lugar, podemos buscar elementos arbitrarios en el tiempo O (log n), lo cual es sorprendente. Una cosa importante es que puedes hacer esta búsqueda varias veces.

Ahora traigamos el montón aquí. Si los elementos vienen en el orden en que están escritos y crea un montón mínimo, se construiría la siguiente matriz interna:

[1, 2, 5, 3, 6, 7, 9, 4, 14, 10, 15, 17, 8]

Ahora, si el criterio principal es buscar eficientemente elementos arbitrarios varias veces, no funcionará aquí porque esta estructura de datos se concentra en la tarea asignada que debe seguir el mínimo / máximo. No solo puede darle un mínimo de tiempo logarítmico, sino que también puede cambiar la prioridad de los artículos en función de la nueva llegada para subir o bajar los artículos. La ordenación rápida en la parte superior lo ayudará a buscar CUALQUIER elemento arbitrario MÚLTIPLES VECES en el tiempo O (log n), pero dificultará el seguimiento mínimo cuando lleguen los nuevos elementos.

Ahora, una vez que haya construido este montón, puede recuperar el mínimo, imprimirlo y la matriz final se vería similar a lo que teníamos después de la clasificación rápida. Eso es esencialmente un montón.

De la descripción anterior, surgen dos cosas:

  1. Es posible que el ordenamiento en sí mismo no se use con frecuencia para ordenar un conjunto de elementos, pero su estructura de datos subyacente, el montón, se usa con frecuencia para mantener un orden particular cuando se desea extraer el mínimo o el máximo. Esto está en el centro de la programación del trabajo. Ninguna otra estructura de datos puede hacer esto tan eficiente como el montón que se usa como cola prioritaria.
  2. Dado que no hay un orden particular en el que los elementos se almacenan en el montón, aparte de encontrar el mínimo o el máximo, no es útil para otro tipo de búsquedas arbitrarias.

Vea mi respuesta a esta pregunta sobre cómo se implementan los montones min / max: ¿Cómo se puede convertir un montón máximo en un montón mínimo de manera eficiente?

El ordenamiento dinámico tiene el mejor tiempo de ejecución del peor de los casos posible, y no necesita almacenamiento adicional. Eso lo hace bueno para situaciones en las que tiene una matriz muy grande.

La verdad es que rara vez se usa mucho en la práctica . Esto es inspirador, ya que tiene todas las propiedades deseables como la clasificación in situ, el tiempo de ejecución determinista del peor caso O (n lg (n)) y otros.

Esto se debe a dos razones principales:

  • No es un tipo estable.
  • No es compatible con caché.

Si quieres entender estas cosas, te sugiero que estudies el capítulo 2 de Algorithms 4th Edition de Sedgewick.

Vaid, Abhishek

La clasificación del montón demuestra ser superior a otros algoritmos de clasificación en una situación especial, cuando se le da a conocer que cada elemento en un conjunto dado de tamaño N, está a lo sumo K distancia de su posición correcta.

En tal caso, podemos utilizar esta información y mantener un montón de tamaño K, por lo que para cada posición que tenemos es su elemento correcto al ver la parte superior del montón.

El tiempo de ejecución de la clase anterior resulta ser NlogK , en lugar de NlogN o N ^ 2 .

Heapsort es ampliamente utilizado en ordenamiento externo. En otras palabras, ordenar archivos muy grandes porque le permite superponer la ordenación con E / S y esa es la clave para algoritmos de clasificación externos exitosos.

Heapsort también es muy útil en algoritmos como la selección de reemplazo o la selección natural que ayudan a crear particiones más grandes en la fase de clasificación. Más grande que la memoria disponible. Eso ayuda a reducir el tiempo para la fase de fusión.

La ordenación del montón rara vez se utiliza en la programación práctica.
En las universidades se enseña a presentar a los estudiantes la estructura de datos acumulados y cómo se puede usar una estructura de datos para una variedad de propósitos.
La estructura de datos del montón se utiliza principalmente para construir una cola prioritaria.

Simplemente, tiene una de las mejores complejidades de tiempo en el peor de los casos, es decir, O (n logn)

Además, la biblioteca STL en C ++ también utiliza la ordenación del montón.