¿Cómo se implementa std :: make_heap de STL?

Supongo que sabes qué es el montón, así que podría omitirlo. Construiré el montón máximo en este ejemplo.

Para construir un montón binario en una matriz, podríamos usar el simple hecho:

  • suponga que ha dejado un hijo, que es un montón válido (preservando la propiedad del montón)
  • suponga que tiene un hijo correcto, que es un montón válido
  • si desea hacer un montón de esos 2 montones secundarios y un nodo principal, simplemente mueva su nodo principal hacia abajo (mediante el intercambio) con el máximo de elementos secundarios a continuación. Esto se llama operación de “hundimiento”, si no recuerdo mal.

Comenzamos simplemente diciendo que nuestros niveles de árbol más bajos (hojas) ya son montones válidos. Luego, para cada elemento “predecesor” lo hundimos para mantener la propiedad del montón.

Observación simple: hundirse requiere tanta complejidad como la altura del árbol debajo. Entonces terminas con log2 (N) de capas, donde cada una toma alrededor de i * n / 2 ^ i operaciones. En resumen, te deja con 2 * n límite superior.

Vaya, wiki lo tiene, así que podrías haberlo leído mejor allí: https://en.wikipedia.org/wiki/Bi…

More Interesting

¿Qué estructuras de datos y algoritmos deben conocer todos los estudiantes de ciencias de la computación / ingeniería?

Como programador autodidacta de 24 años, ¿debo comenzar con la programación competitiva o el desarrollo web?

¿Cuál es la complejidad del tiempo para una solución iterativa de la serie Fibonacci?

¿Puede la búsqueda de profundización iterativa encontrar una solución más rápida que A * en algunos casos?

¿Se puede usar el algoritmo de Prim para encontrar la ruta más corta desde un vértice a todos los demás vértices en un gráfico no dirigido?

Cómo generar un número aleatorio en C

¿Cómo se implementa la estructura de datos establecida en C?

¿Cuál es la diferencia entre las estructuras de datos de programación C y las estructuras de datos de programación Java?

¿Cuáles son los algoritmos detrás de las simulaciones de partículas en C / C ++?

¿Qué lenguaje, libro o técnica es el mejor punto de partida cuando estás frustrado con tus habilidades de programación y quieres tener una sólida formación en algoritmos y estructuras de datos?

Tengo una pila masiva de más de 300 pares de calcetines. ¿Cuál es el algoritmo más rápido que puedo usar para extraer unos 25 pares coincidentes de la pila desordenada?

¿Por qué un montón de emparejamiento es más rápido que un montón binario?

Cómo hacer un programa que imprima potencias de 2 hasta n en C ++

¿Por qué las personas priorizan el método estadístico para el sistema de reconocimiento de entidades de nombre a la coincidencia exacta algorítmica?

¿Debo aprender a diseñar estructuras de datos antes de aprender sobre algoritmos?