in

Estructura de datos de montón – javatpoint

heap data structure

¿Qué es Heap?

Un montón es un árbol binario completo y el árbol binario es un árbol en el que el nodo puede tener dos hijos como máximo. Antes de conocer más sobre la estructura de datos del montón, deberíamos conocer el árbol binario completo.

¿Qué es un árbol binario completo?

Un árbol binario completo es un árbol binario en el que todos los niveles excepto el último nivel, es decir, el nodo hoja deben estar completamente llenos y todos los nodos deben estar justificados a la izquierda.

Entendamos con un ejemplo.

Estructura de datos del montón

En la figura anterior, podemos observar que todos los nodos internos están completamente llenos excepto el nodo hoja; por lo tanto, podemos decir que el árbol anterior es un árbol binario completo.

Estructura de datos del montón

La figura anterior muestra que todos los nodos internos están completamente llenos excepto el nodo hoja, pero los nodos hoja se agregan en la parte derecha; por lo tanto, el árbol anterior no es un árbol binario completo.

Nota: El árbol del montón es una estructura de datos de árbol binario equilibrado especial donde el nodo raíz se compara con sus hijos y se organiza en consecuencia.

¿Cómo podemos organizar los nodos en el árbol?

Hay dos tipos de montón:

Montón mínimo: El valor del nodo padre debe ser menor o igual que cualquiera de sus hijos.

O

En otras palabras, el min-heap se puede definir como, para cada nodo i, el valor del nodo i es mayor o igual que su valor principal excepto el nodo raíz. Matemáticamente, se puede definir como:

A[Parent(i)] <= A[i]

Entendamos el min-heap a través de un ejemplo.

Estructura de datos del montón

En la figura anterior, 11 es el nodo raíz y el valor del nodo raíz es menor que el valor de todos los demás nodos (hijo izquierdo o hijo derecho).

Montón máximo: El valor del nodo padre es mayor o igual que sus hijos.

O

En otras palabras, el montón máximo se puede definir como para cada nodo i; el valor del nodo i es menor o igual que su valor principal, excepto el nodo raíz. Matemáticamente, se puede definir como:

A[Parent(i)] > = A[i]

Estructura de datos del montón

El árbol anterior es un árbol de montón máximo ya que satisface la propiedad del montón máximo. Ahora, veamos la representación de matriz del montón máximo.

Complejidad de tiempo en Max Heap

El número total de comparaciones requeridas en el montón máximo depende de la altura del árbol. La altura del árbol binario completo siempre es logn; por lo tanto, la complejidad del tiempo también sería O (logn).

Algoritmo de operación de inserción en el montón máximo.

Entendamos el montón máximo a través de un ejemplo.

En la figura anterior, 55 es el nodo padre y es mayor que ambos de su hijo, y 11 es el padre de 9 y 8, por lo que 11 también es mayor que el de ambos de su hijo. Por lo tanto, podemos decir que el árbol anterior es un árbol de montón máximo.

Inserción en el árbol de montón

44, 33, 77, 11, 55, 88, 66

Supongamos que queremos crear el árbol de montón máximo. Para crear el árbol de montón máximo, debemos considerar los dos casos siguientes:

  • Primero, tenemos que insertar el elemento de tal manera que se mantenga la propiedad del árbol binario completo.
  • En segundo lugar, el valor del nodo padre debe ser mayor que el de su hijo.

Paso 1: Primero agregamos el elemento 44 en el árbol como se muestra a continuación:

Estructura de datos del montón

Paso 2: El siguiente elemento es 33. Como sabemos, la inserción en el árbol binario siempre comienza desde el lado izquierdo, por lo que 44 se agregará a la izquierda de 33 como se muestra a continuación:

Estructura de datos del montón

Paso 3: El siguiente elemento es 77 y se agregará a la derecha del 44 como se muestra a continuación:

Estructura de datos del montón

Como podemos observar en el árbol anterior, no satisface la propiedad max heap, es decir, el nodo padre 44 es menor que el hijo 77. Por lo tanto, intercambiaremos estos dos valores como se muestra a continuación:

Estructura de datos del montón

Paso 4: El siguiente elemento es 11. El nodo 11 se agrega a la izquierda de 33 como se muestra a continuación:

Estructura de datos del montón

Paso 5: El siguiente elemento es 55. Para convertirlo en un árbol binario completo, agregaremos el nodo 55 a la derecha de 33 como se muestra a continuación:

Estructura de datos del montón

Como podemos observar en la figura anterior, no satisface la propiedad del montón máximo porque 33 <55, por lo que intercambiaremos estos dos valores como se muestra a continuación:

Estructura de datos del montón

Paso 6: El siguiente elemento es 88. El subárbol izquierdo está completo, por lo que agregaremos 88 a la izquierda de 44 como se muestra a continuación:

Estructura de datos del montón

Como podemos observar en la figura anterior, no satisface la propiedad del montón máximo porque 44 <88, por lo que intercambiaremos estos dos valores como se muestra a continuación:

Nuevamente, está violando la propiedad max heap porque 88> 77, por lo que intercambiaremos estos dos valores como se muestra a continuación:

Paso 7: El siguiente elemento es 66. Para hacer un árbol binario completo, agregaremos el elemento 66 al lado derecho de 77 como se muestra a continuación:

En la figura anterior, podemos observar que el árbol satisface la propiedad de max heap; por lo tanto, es un árbol de montón.

Eliminación en el árbol del montón

En Eliminación en el árbol del montón, el nodo raíz siempre se elimina y se reemplaza con el último elemento.

Entendamos la eliminación a través de un ejemplo.

Paso 1: En el árbol anterior, el primer nodo 30 se elimina del árbol y se reemplaza con el elemento 15 como se muestra a continuación:

Ahora apilaremos el árbol. Comprobaremos si el 15 es mayor que cualquiera de sus hijos o no. 15 es menor que 20, por lo que intercambiaremos estos dos valores como se muestra a continuación:

Nuevamente, compararemos 15 con su hijo. Dado que 15 es mayor que 10, no se producirá ningún intercambio.

Algoritmo para apilar el árbol


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Operadores SQL – javatpoint

002AyDU39YHYafzbL09lLu0 1.1634315798.fit lim.size 1200x630

Revisión de Roku Streaming Stick 4K +