La propiedad del montón
Esta propiedad puede considerarse una restricción para definir un árbol, una determinada estructura que debe seguirse al construir un árbol. Heap define una relación entre los nodos parentales y sus nodos infantiles, hay dos tipos de montones y, por lo tanto, hay dos tipos de relación que pueden existir entre el nodo principal y el nodo secundario:
Una representación del Min-Heap es:
(Imagen de Wikipedia)
Como puede ver, en el árbol los nodos principales tienen valores más bajos que sus nodos infantiles
La representación de AR del Max-Heap es:
(Imagen de Wikipedia)
Puede ver que los nodos principales tienen valores mayores que sus nodos infantiles.
Representación de matriz
Los montones en un lenguaje de programación se representan en forma de una matriz, un ejemplo de la matriz de montón construida desde el árbol máximo de la altura anterior es:
var max-heap = [100,19,36,17,3,25,1,2,7];Al representar un montón binario en forma de matriz, usa la siguiente expresión para deducir lo siguiente:
Dónde "i" significa el índice de la matriz. Hablando de índices, cuando implementamos estructuras de montón usando una matriz, colocamos un "nulo" en el primer índice que es el índice 0.
Representación visual del funcionamiento de un montón
Para una representación virtual del funcionamiento de un mínimo-montón y cómo se insertan los valores en el montón, podemos dirigirnos al visualizador del montón por la Universidad de San Francisco al hacer clic aquí
Inserte valores en el montón y notará cómo se inserta un nuevo elemento en el montón debido a la animación:
Funcionamiento de montón
Un montón binario tiene dos funciones principales:
Agregar un nuevo elemento en el montón
Siempre se agrega un nuevo elemento al final de la matriz, y luego se verifica contra su padre y si va en contra de la propiedad del montón, entonces se intercambia con su padre. El elemento se verifica hasta que se haya comparado con el nodo raíz del montón (el nodo raíz es el primer nodo del montón).
Eliminar un elemento del montón
Siempre que desee eliminar o obtener un valor del montón, siempre obtiene el valor del nodo raíz. Es por eso que este valor es el valor más pequeño si se trata de un mínimo y el valor más grande si es un máximo de tiempo. Cuando el nodo raíz se retira del montón, el último nodo de la matriz ocupa su lugar, luego se compara con sus nodos infantiles para que coincida con la condición del montón. Si no coincide con la condición, se reemplaza con su nodo secundario y luego se verifica con más nodos infantiles. Una manera mucho mejor de explicar esto es mediante el uso del visor de Heap Live como se muestra a continuación:
Puede observar el proceso de eliminación observando el GIF anterior.
Implementación del montón binario en JavaScript
Vamos a implementar el paso a paso MIN-TAEP, comenzamos el proceso creando una nueva función con las siguientes líneas de código:
Sea minheap = function ()El primer paso es crear una matriz y establecer el valor en el índice 0 como nulo:
Let Heap = [NULL];
Entonces vamos a crear el función de inserción Usando las siguientes líneas de código:
este.insert = function (num)
montón.empuje (num);
if (montón.longitud> 2)
letidx = montón.Longitud - 1;
while (Heap [idx] = 1)
[montón [matemáticas.piso (IDX / 2)], Heap [IDX]] = [
Heap [IDX],
montón [matemáticas.piso (IDX / 2)],
];
Si (matemáticas.piso (IDX / 2)> 1)
IDX = matemáticas.piso (IDX / 2);
demás
romper;
;
Las siguientes cosas están sucediendo en este fragmento de código:
El siguiente paso es implementar el eliminar la función Con las siguientes líneas de código:
este.eliminar = function ()Los siguientes pasos están sucediendo en el fragmento de código anterior:
El siguiente paso es crear una función que nos muestre la matriz de montón a la consola, lo hacemos utilizando las siguientes líneas de código:
este.show = function ()El fragmento de código completo de la implementación de la estructura de datos MIN-HeAP es:
letminheap = function ()Lo que debemos hacer ahora es crear un nuevo Min-HeAP usando la función Minheap que acabamos de crear y luego agregarle elementos usando el Insertar y mostrar el montón. Para hacer esto, hacemos una nueva variable y la asignamos en el minheap utilizando las siguientes líneas de código:
var newminheap = new Minheap ();A continuación, subamos valores al montón utilizando las siguientes líneas de código:
nuevo.insertar (34);Ahora, llamamos al espectáculo función para mostrar la matriz de montón en la consola:
nuevo.espectáculo();Obtenemos el siguiente resultado en nuestra consola:
Como puede ver, el primer elemento de la matriz es nulo. El resto de los nodos no son más grandes que sus nodos infantiles. Por ejemplo, si tomamos el nodo con el valor 35. El niño izquierdo y derecho son como:
Puedes ver claramente el padre (35) es más pequeño que su hijo izquierdo (82) y su hijo derecho (61) también. Del mismo modo, cada nodo principal es más pequeño que su nodo hijo, por lo tanto, podemos deducir que nuestro código funciona perfectamente
Del mismo modo, simplemente cambiar la condición para comparar para ser el nodo principal que es más pequeño que el niño al nodo principal que es más grande que el nodo secundario, podemos implementar el Montón Usando las siguientes líneas de código:
letmaxHeap = function ()Eso es todo, ha implementado con éxito un montones binarios en JavaScript
Conclusión
Los montones binarios son la implementación parietal de un árbol binario que tiene la condición de tener más Dos nodos infantiles para cada nodo principal y la estructura completa del árbol binario. Lo que significa que los niveles del árbol se llenarán desde el lado izquierdo o el hijo izquierdo y luego el niño derecho.
Los montones binarios son parte de las estructuras de datos avanzadas, y hay dos tipos de árbol binario: uno de ellos se llama el montón min, mientras que el otro se llama el montón máximo. En el Min-Heap, los nodos principales tienen valores más pequeños que sus nodos infantiles y los valores de los nodos hermanos no importan.
Del mismo modo, en máximo-heap, los valores del nodo principal son siempre mayores que el nodo de su hijo y los valores de los nodos hermanos no importan. En esta publicación, aprendimos sobre los montones y su implementación en Vanilla JavaScript y al final probamos nuestra implementación.