Heap_H.nereusHeap_DeleteMin(
Heap_Insert(
Heap_Insert(
Heap_Insert(Heap_Empty() as Heap_H, 5),
3),
7))
Idea semántica: insertamos 5, después 3 (que se vuelve raíz porque es menor), después 7 (que va a la rama derecha pero el skew lo cruza a la izquierda); finalmente borramos el mínimo (3) fusionando los dos subárboles.
· abrevia Heap_Empty() as Heap_H en las vistas de árbol.Heap_Insert (i = 5)Heap_Insert(Heap_Empty() as Heap_H, i) = BTree_Create(Heap_Empty() as Heap_H, Heap_Empty() as Heap_H, i) as Heap_H;
i = 5.Heap_DeleteMin(
Heap_Insert(
Heap_Insert(
BTree_Create(Heap_Empty() as Heap_H, Heap_Empty() as Heap_H, 5) as Heap_H,
3),
7))
Heap_Insert con i < x (3 < 5): 3 sube a la raíz(i < x) implies Heap_Insert(BTree_Create(L, R, x) as Heap_H, i) = BTree_Create(BTree_Create(L, R, x) as Heap_H, Heap_Empty() as Heap_H, i) as Heap_H;
L = R = Heap_Empty() as Heap_H, x = 5, i = 3. Condición 3 < 5 ✓Heap_DeleteMin(
Heap_Insert(
BTree_Create(
BTree_Create(·, ·, 5) as Heap_H,
Heap_Empty() as Heap_H,
3) as Heap_H,
7))
Heap_Insert con not (i < x) (7 ≥ 3): recursa en R + swapnot (i < x) implies Heap_Insert(BTree_Create(L, R, x) as Heap_H, i) = BTree_Create(Heap_Insert(R as Heap_H, i), L, x) as Heap_H;
L = BTree_Create(·, ·, 5) as Heap_H, R = Heap_Empty() as Heap_H, x = 3, i = 7. Condición not (7 < 3) ✓Heap_DeleteMin(
BTree_Create(
Heap_Insert(Heap_Empty() as Heap_H, 7),
BTree_Create(·, ·, 5) as Heap_H,
3) as Heap_H)
Heap_Insert sobre el subárbol izquierdo nuevo (i = 7)i = 7.Heap_DeleteMin(
BTree_Create(
BTree_Create(·, ·, 7) as Heap_H,
BTree_Create(·, ·, 5) as Heap_H,
3) as Heap_H)
Acá termina la construcción del heap. Notar que 7 quedó como hijo izquierdo de 3 a pesar de haberse insertado "hacia la derecha" — eso es el skew: el subárbol que recibió la recursión termina del lado contrario.
Heap_DeleteMin: borrar la raíz, fusionar L y RHeap_DeleteMin(BTree_Create(L, R, x) as Heap_H) = Heap_Merge(L as Heap_H, R as Heap_H);
L = BTree_Create(·, ·, 7) as Heap_H, R = BTree_Create(·, ·, 5) as Heap_H, x = 3.Heap_Merge(BTree_Create(·, ·, 7) as Heap_H,
BTree_Create(·, ·, 5) as Heap_H)
Heap_Merge con not (x1 < x2) (7 ≥ 5): x2 = 5 sube, recursa con R2not (x1 < x2) implies Heap_Merge(BTree_Create(L1, R1, x1) as Heap_H, BTree_Create(L2, R2, x2) as Heap_H) = BTree_Create( Heap_Merge(BTree_Create(L1, R1, x1) as Heap_H, R2 as Heap_H), L2, x2 ) as Heap_H;
L1 = R1 = · ; x1 = 7L2 = R2 = · ; x2 = 5not (7 < 5) ✓BTree_Create(
Heap_Merge(BTree_Create(·, ·, 7) as Heap_H, Heap_Empty() as Heap_H),
Heap_Empty() as Heap_H,
5
) as Heap_H
Heap_Merge(h, Heap_Empty) = h (identidad)Heap_Merge(h, Heap_Empty() as Heap_H) = h;
Heap_Merge(BTree_Create(·, ·, 7) as Heap_H, Heap_Empty() as Heap_H):BTree_Create(·, ·, 7) as Heap_H
BTree_Create(
BTree_Create(Heap_Empty() as Heap_H, Heap_Empty() as Heap_H, 7) as Heap_H,
Heap_Empty() as Heap_H,
5
) as Heap_H
Vista de árbol del resultado:
Heap_DeleteMin sacó el mínimo (3) y fusionó los dos subárboles que tenían 7 y 5. Como 5 < 7, 5 quedó arriba en el resultado fusionado, con 7 como hijo izquierdo (el skew puso al "ganador del Merge" del lado izquierdo). El nuevo mínimo es 5 — coherente con min({3, 5, 7} \ {3}) = 5.