Esercizio 12inserimenti e rimozioni in uno heap
In questa pagina 7
Testo (parti 1 di vari scritti: 24/06/2026, 10/09/2026, 30/01/2026, 09/09/2025 e un esempio di tema d'esame). Negli array che seguono sono indicate solo le chiavi, con indicizzazione da ; ogni array rappresenta un min-heap.
- con entry. Disegnare l'albero corrispondente e scrivere l'array dopo
insert(3). - . Disegnare l'albero, eseguire
insert(4)e scrivere l'array; poi eseguireremoveMin()e scrivere l'array finale. - . Disegnare l'albero e mostrare l'array dopo
removeMin(). - . Disegnare l'albero e far vedere l'array dopo
insert(3). - Una coda con priorità , implementata con uno heap e inizialmente vuota, riceve nell'ordine
insert(5),insert(3),insert(6),insert(4),insert(7),insert(2),removeMin(). Disegnare lo heap risultante (solo le chiavi).
Richiami
Con indici da : figli di in e , padre in (vedi HeapAlbero binario completo e sua altezza floor(log2 n); heap = albero completo con heap-order property; proprietà (radice minima, cammini non decrescenti); rappresentazione su array con level numbering; insert con up-heap bubbling, removeMin con down-heap bubbling, rimozione di una entry qualsiasi; invarianti e costi Theta(log n); esempio svolto.Heap →).
insert(k): in poi up-heap: finché ha un padre con chiave maggiore, si scambia con il padre.removeMin(): si restituisce ; si porta in e si accorcia di uno; poi down-heap: finché ha un figlio con chiave minore, si scambia con il figlio di chiave minima.
1. , insert(3)
2
/ \
5 4
/ \ /
9 8 7va in posizione , figlio destro di . Padre : scambio, sale in posizione : . Padre : stop.
Risultato: .
2. , insert(4) poi removeMin()
Albero: radice ; figli ; nipoti (sotto ) e (sotto ).
insert(4): in posizione (figlio sinistro di ). : scambio, in posizione : . Padre : scambio, in posizione : . Padre : stop. Array dopo insert: .
removeMin(): si restituisce . L'ultima entry () va in radice: . Figli di : e , il minore è : scambio . Figli di in posizione : e , minore : scambio . In posizione non ci sono figli ().
Risultato: .
3. , removeMin()
Albero: radice ; figli ; sotto : ; sotto : . È un heap valido (ogni nodo i figli).
Si restituisce ; l'ultima entry () va in radice: . Figli e : minore , scambio . Il è in posizione con figlio (non c'è ): scambio . Posizione senza figli.
Risultato: .
4. , insert(3)
Albero: radice ; figli ; sotto : ; sotto : . va in posizione (figlio destro di ). : scambio ( in posizione ). Padre : scambio ( in posizione ): radice, stop.
Risultato: .
5. Sequenza di operazioni su heap vuoto
| Operazione | Array dopo |
|---|---|
insert(5) |
|
insert(3) |
( sale) |
insert(6) |
|
insert(4) |
( in pos. 4, padre scambio; padre ) |
insert(7) |
(, nessuno scambio) |
insert(2) |
( in pos. 6, padre , poi , arriva in radice) |
removeMin() |
Ultimo passo: l'ultima entry () va in radice, ; figli : minore , scambio ; in posizione non ci sono figli ().
Albero finale: radice ; figli e ; sotto : e .
(Tutti gli array di questo esercizio sono stati verificati eseguendo un'implementazione dello heap.)
Errori comuni
- Nel down-heap scambiare con il figlio sinistro invece che con il minore tra i due.
- In
removeMinportare in radice un'entry qualunque invece dell'ultima (si perde la completezza). - Non fermare il down-heap quando entrambi i figli, o proseguire oltre le foglie.
- Dimenticare di aggiornare (numero di entry) dopo
insert/removeMin.
Versione ripasso
Testo. Min-heap (solo chiavi, indici da 1): (1) , insert(3); (2) , insert(4) e poi removeMin(); (3) , removeMin(); (4) , insert(3); (5) heap vuoto con insert e removeMin().
- Regole (vedi HeapAlbero binario completo e sua altezza floor(log2 n); heap = albero completo con heap-order property; proprietà (radice minima, cammini non decrescenti); rappresentazione su array con level numbering; insert con up-heap bubbling, removeMin con down-heap bubbling, rimozione di una entry qualsiasi; invarianti e costi Theta(log n); esempio svolto.Heap →):
insertin e up-heap;removeMin: , down-heap col figlio minore. - (1) . (2) dopo
insert: ; doporemoveMin: . - (3) . (4) .
- (5) passaggi , , , , , ;
removeMine . - Passaggi ricordabili: (2)
insert(4): pos. 8 4 2;removeMin: in radice, scambio con e poi con ; (3) in radice, scambio con e poi con ; (5) l'ultima entry () va in radice e scambia con . - Regola di verifica: ogni nodo i figli e array senza buchi (albero completo).
- Errori: figlio sinistro invece del minore; non si usa l'ultima entry; down-heap non fermato; non aggiornato.