Notas sobre el algoritmo: montón

[A menos que se indique lo contrario, todos son montones binarios mínimos]

1. Introducción

2 características

  • Estructural: se ajusta a la estructura de un árbol binario completo.
  • Orden: satisfacer que el nodo padre sea más pequeño que el nodo hijo (minimizar el montón) o que el nodo padre sea mayor que el nodo hijo (maximizar el montón)

3 almacenamiento en montón binario

almacenamiento secuencial

El orden de un montón binario se puede reflejar fácilmente mediante subíndices.

4 Inserta nuevos elementos en el montón.

  • La inserción del montón consiste en insertar nuevos elementos o nodos después del elemento con el número de secuencia más grande; de ​​lo contrario, violará la naturaleza estructural del montón.
  • Si el nuevo elemento se coloca sin violar el orden del montón, la operación finaliza.
  • De lo contrario, deje que el nodo se mueva hacia el nodo principal hasta que se cumpla el orden o se alcance el nodo raíz.
  • El movimiento ascendente de nuevos nodos se llama filtrado ascendente.

4.1 Eficiencia del tiempo

  • El peor de los casos es O(logn) [intercambio hasta el nodo raíz]
  • En promedio, el filtrado finaliza antes de tiempo.
    • Algunos datos muestran que el promedio es de 2,6 comparaciones, por lo que los elementos suben 1,6 niveles en promedio.

5 Operación de inserción (DeQueue)

  • Cuando se elimina el elemento más pequeño, aparece un nodo vacío en la raíz. El tamaño del montón es 1 más pequeño que antes y la estructura del montón nos dice que el último nodo debe eliminarse.
  • Si el último elemento se puede colocar en este nodo vacío, colóquelo. Sin embargo, esto generalmente no es posible.
  • Tienes que jugar un "juego" similar a la operación de inserción: coloca algunos elementos en nodos vacíos y luego mueve los nodos vacíos.
    • La única diferencia es que para las operaciones DeQueue, los nodos vacíos se mueven hacia abajo.

  • Encuentre un nodo secundario más pequeño del nodo vacío. Si el valor del niño es menor que el elemento que queremos colocar, coloque el niño en el nodo vacío y empuje el nodo vacío hacia abajo una capa.
    • Repita esta acción hasta que el artículo se coloque en la posición correcta.

5.1 Complejidad del tiempo

  • En el peor de los casos, deQueue es una operación de tiempo logarítmico
  • Según el orden del montón, el valor del último nodo del montón es generalmente relativamente grande. Por lo tanto, el filtrado descendente rara vez finaliza una o dos capas antes, por lo que la operación de eliminación de cola también es logarítmica en tiempo promedio.

6 Construye una pila

  • Puede verse como N inserciones consecutivas, que deben completarse en tiempo O (NlogN).

  • De hecho, durante el proceso de construcción, no nos importa el estado del montón después de agregar cada elemento, lo que nos importa es el estado final después de agregar todos los N elementos. El estado final es garantizar el orden del montón. No importa si se establece o no el orden en el proceso intermedio.
  • Con esta premisa, podemos reducir la complejidad temporal de construir el montón a O (N)
    • Usando la definición recursiva del montón
      • Si la función buildHeap puede ajustar un árbol binario completo en un montón, entonces simplemente llame a buildHeap de forma recursiva en el submontón izquierdo y en el submontón derecho.
      • En este punto, podemos asegurarnos de que, además del nodo raíz, el orden del montón se haya establecido en otros lugares.
      • Luego llame al filtrado descendente en el nodo raíz para crear orden en el montón.
      • Si llamamos al filtrado descendente en los nodos en orden jerárquico inverso, cuando realizamos el filtrado descendente en el nodo i, todos los descendientes del nodo i ya han llamado al filtrado descendente.
        • No es necesario realizar un filtrado descendente en los nodos de hoja
        • Filtre hacia abajo comenzando desde el nodo no hoja con el número más alto

6.1 Ejemplos

Inicialmente, se construye un árbol binario completo según el orden de los datos.

Filtre hacia abajo comenzando desde el nodo que no es hoja con el número de secuencia más grande (30)

 

6.2 Análisis de tiempo

  •  Para un nodo h (la altura del nodo hoja es 0), el número máximo de intercambios en el filtrado descendente es h
  • El tiempo máximo para construir un montón es la suma del número de intercambios necesarios para el ajuste de todos los nodos, es decir, la suma de las alturas de todos los nodos.

pila 7D

  • Cada nodo tiene d hijos, por lo que el montón resultante es más corto.
  • insertar:O(\log_dN)
  • Eliminación: necesita encontrar el más pequeño entre d elementos. La complejidad del tiempo es:O(\log_dN)
  • Ventajas: inserción rápida
  • Desventajas: eliminación lenta
  • usar:
    • Cola con más inserciones que eliminaciones
    • La cola es demasiado grande para almacenarse en la memoria. Cuando es necesario colocarla en un almacenamiento externo

Supongo que te gusta

Origin blog.csdn.net/qq_40206371/article/details/132712733
Recomendado
Clasificación