1 a.a. 2001/2002 gli heap fulvio corno - matteo sonza reorda dip. automatica e informatica...
TRANSCRIPT
![Page 1: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/1.jpg)
1 a.a. 2001/2002
Gli heap
Fulvio CORNO - Matteo SONZA REORDADip. Automatica e Informatica
Politecnico di Torino
![Page 2: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/2.jpg)
2 a.a. 2001/2002
Sommario
• Gli heap
• L’algoritmo Heapsort
• Le code con priorità.
![Page 3: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/3.jpg)
3 a.a. 2001/2002
Definizione di heap
Uno heap è un albero binario quasi completo nel quale, detto key(i) il valore associato al generico nodo i, per ogni nodo i (ad esclusione della radice) è soddisfatta la proprietà
key(i) key(padre(i))
Ne consegue che l’elemento con valore minore è memorizzato nella radice.
![Page 4: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/4.jpg)
4 a.a. 2001/2002
Esempio
16
14 10
8 7 9 3
2 4 1
![Page 5: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/5.jpg)
5 a.a. 2001/2002
Altezza
Ad ogni nodo di uno heap è associata una altezza, definita come il numero di archi sul più lungo cammino che va dal nodo ad una foglia.
L’altezza di uno heap è l’altezza della sua radice.
Poiché lo heap è un albero binario quasi completo, se il numero di nodi è pari ad n, la sua altezza sarà (lg n).
![Page 6: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/6.jpg)
6 a.a. 2001/2002
Implementazione
Gli heap sono normalmente implementati come vettori.
In particolare
• La radice viene memorizzata nell’elemento di indice 1 (il primo del vettore)
• I due figli dell’elemento in posizione i vengono memorizzati negli elementi in posizione 2i (figlio sinistro) e 2i+1 (figlio destro).
![Page 7: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/7.jpg)
7 a.a. 2001/2002
Limit
Dal momento che lo heap è un albero binario quasi completo, l’indice i di tutti i suoi elementi nel vettore rispettano l’espressione
i n
essendo n il numero di elementi nello heap.
Di conseguenza, di può dire che:
• Se i n/2 , il nodo i ha due figli
• Se i = n/2 , il nodo i ha uno (n pari) o due (n dispari) figli
• Se i > n/2 , il nodo i non ha alcun figlio
![Page 8: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/8.jpg)
8 a.a. 2001/2002
Esempio di implementazione16
14 10
8 7 9 3
2 4 1
16
1
14
2
10
3
18
4
7
5
9
6
3
7
2
8
4
9
1
10
![Page 9: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/9.jpg)
9 a.a. 2001/2002
Costruzione di uno heap
Si utilizza come base la procedura Heapify(A,i), i cui parametri sono il vettore A ed un indice i al suo interno.
La procedura presuppone che
• i due alberi corrispondenti ai figli dell’elemento memorizzato in i siano degli heap
• l’elemento in i possa avere valore minore di quelli dei figli.
Se necessario, la procedura provvede quindi a trasformare l’albero in uno heap.
![Page 10: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/10.jpg)
10 a.a. 2001/2002
Heapify
![Page 11: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/11.jpg)
11 a.a. 2001/2002
Heapify
Le istruzioni 3-7 calcolano il massimo tra A[l],A[i], A[r],
basandosi sull’ipotesi che A[l] e A[r] siano già degli heap.
![Page 12: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/12.jpg)
12 a.a. 2001/2002
Esempio (1)
16
4 10
14 7 9 3
2 8 1
Heapify(A,2)
![Page 13: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/13.jpg)
13 a.a. 2001/2002
Esempio (2)
16
14 10
4 7 9 3
2 8 1
![Page 14: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/14.jpg)
14 a.a. 2001/2002
Esempio (3)
16
14 10
4 7 9 3
2 8 1
Heapify(A,4)
![Page 15: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/15.jpg)
15 a.a. 2001/2002
Esempio (4)
16
14 10
8 7 9 3
2 4 1
![Page 16: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/16.jpg)
16 a.a. 2001/2002
Esempio (5)
16
14 10
8 7 9 3
2 4 1
Heapify(A,9)
![Page 17: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/17.jpg)
17 a.a. 2001/2002
Complessità
La procedura Heapify ha una complessità data da
T(n) = (1) + T(2/3n)
dove
(1) è il costo per eseguire i confronti necessari per calcolare largest
• T(2/3n) è il costo della chiamata recursiva su uno dei figli, pari alla dimensione del figlio nel caso peggiore.
In base al teorema principale, tale complessità può essere espressa come
T(n) = O(lg n)
![Page 18: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/18.jpg)
18 a.a. 2001/2002
Fattore 2/3: esempioN=5
N1=3 N2=1
N1 = 3/5 N < 2/3N
![Page 19: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/19.jpg)
19 a.a. 2001/2002
Build-Heap
Utilizza la procedura Heapify per trasformare un albero binario (memorizzato in un vettore) in uno heap.
Consiste nell’applicare Heapify sugli elementi nella prima metà del vettore.
![Page 20: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/20.jpg)
20 a.a. 2001/2002
Build-heap
![Page 21: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/21.jpg)
21 a.a. 2001/2002
Esempio (0)
4
1 3
2 16 9 10
14 8 7
Si vuole trasformare in heap l’albero binario
disegnato.
![Page 22: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/22.jpg)
22 a.a. 2001/2002
Esempio (1)
4
1 3
2 16 9 10
14 8 7
Heapify(A,5)
![Page 23: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/23.jpg)
23 a.a. 2001/2002
Esempio (2)
4
1 3
2 16 9 10
14 8 7
![Page 24: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/24.jpg)
24 a.a. 2001/2002
Esempio (3)
4
1 3
2 16 9 10
14 8 7
Heapify(A,4)
![Page 25: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/25.jpg)
25 a.a. 2001/2002
Esempio (4)
4
1 3
14 16 9 10
2 8 7
![Page 26: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/26.jpg)
26 a.a. 2001/2002
Esempio (5)
4
1 3
14 16 9 10
2 8 7
Heapify(A,3)
![Page 27: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/27.jpg)
27 a.a. 2001/2002
Esempio (6)
4
1 10
14 16 9 3
2 8 7
![Page 28: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/28.jpg)
28 a.a. 2001/2002
Esempio (7)
4
1 10
14 16 9 3
2 8 7
Heapify(A,2)
![Page 29: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/29.jpg)
29 a.a. 2001/2002
Esempio (8)
4
16 10
14 7 9 3
2 8 1
![Page 30: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/30.jpg)
30 a.a. 2001/2002
Esempio (9)
4
16 10
14 7 9 3
2 8 1
Heapify(A,1)
![Page 31: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/31.jpg)
31 a.a. 2001/2002
Esempio (10)
16
14 10
8 7 9 3
2 4 1
![Page 32: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/32.jpg)
32 a.a. 2001/2002
Complessità
È facile verificare che per trasformare in heap un albero binario di n elementi bisogna chiamare Heapify n/2 volte, e ciascuna di queste chiamate ha una complessità sicuramente inferiore a O(lg n).
Quindi la complessità di Build-heap è sicuramente O(n lg n).
In realtà si può dimostrare che la complessità di Build-heap è O(n).
![Page 33: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/33.jpg)
33 a.a. 2001/2002
Giustificazione
log 2 log 2 log 2 log 2
log 4 log 4 log 4 log 4
log 8 log 8 log 8
log N 1
2log N/2 log N/2
N/2
N/4
N/8
...
...
...
... ... ...
)(...2
2log2
)(
log..1
log..1
nOi
cn
nnT
nii
ni
ii
![Page 34: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/34.jpg)
34 a.a. 2001/2002
Sommario
• Gli heap
• L’algoritmo Heapsort
• Le code con priorità.
![Page 35: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/35.jpg)
35 a.a. 2001/2002
Heapsor
tSfruttando le proprietà degli heap e le operazioni su di essi definite è possibile definire un algoritmo di ordinamento di vettori.
Heap sort si basa sull’iterazione dei seguenti passi:
1. Trasforma il vettore in uno heap
2. Scambia il primo elemento (che è sicuramente il più grande) con l’ultimo
3. Riduci la dimensione dello heap di 1
4. Ripeti da 1.
![Page 36: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/36.jpg)
36 a.a. 2001/2002
Heapsort
![Page 37: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/37.jpg)
37 a.a. 2001/2002
Esempio (0)
16
14 10
8 7 9 3
2 4 1
Passo 0:si costruisce lo heap
![Page 38: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/38.jpg)
38 a.a. 2001/2002
Esempio (1)
1
14 10
8 7 9 3
2 4 16
Passo 1:si scambiano il primo e l’ultimo
elemento
![Page 39: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/39.jpg)
39 a.a. 2001/2002
Esempio (2)
1
14 10
8 7 9 3
2 4 16
Passo 2:la parte da ordinare si riduce ai primi n-1
elementi
![Page 40: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/40.jpg)
40 a.a. 2001/2002
Esempio (3)
14
8 10
4 7 9 3
2 1 16
Passo 3:si trasforma la parte da ordinare in uno
heap
![Page 41: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/41.jpg)
41 a.a. 2001/2002
Esempio (4)
1
8 10
4 7 9 3
2 14 16
Passo 4:si scambiano il primo e l’ultimo
elemento
![Page 42: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/42.jpg)
42 a.a. 2001/2002
Esempio (5)
1
8 10
4 7 9 3
2 14 16
Passo 5:la parte da ordinare si riduce ai primi n-2
elementi
![Page 43: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/43.jpg)
43 a.a. 2001/2002
Esempio (6)
10
8 9
4 7 1 3
2 14 16
Passo 6:si trasforma la parte da ordinare in uno
heap
![Page 44: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/44.jpg)
44 a.a. 2001/2002
Esempio (7)
2
8 9
4 7 1 3
10 14 16
Passo 7:si scambiano il primo e l’ultimo
elemento
![Page 45: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/45.jpg)
45 a.a. 2001/2002
Esempio (8)
2
8 9
4 7 1 3
10 14 16
Passo 8:la parte da ordinare si riduce ai primi n-3
elementi
![Page 46: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/46.jpg)
46 a.a. 2001/2002
Esempio (9)
9
8 3
4 7 1 2
10 14 16
Passo 9:si trasforma la parte da ordinare in uno
heap
![Page 47: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/47.jpg)
47 a.a. 2001/2002
Esempio (10)
2
8 3
4 7 1 9
10 14 16
Passo 10:si scambiano il primo e l’ultimo
elemento
![Page 48: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/48.jpg)
48 a.a. 2001/2002
Esempio (11)
2
8 3
4 7 1 9
10 14 16
Passo 11:la parte da ordinare si riduce ai primi n-4
elementi
![Page 49: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/49.jpg)
49 a.a. 2001/2002
Esempio (12)
8
7 3
4 2 1 9
10 14 16
Passo 12:si trasforma la parte da ordinare in uno
heap
![Page 50: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/50.jpg)
50 a.a. 2001/2002
Esempio (13)
1
7 3
4 2 8 9
10 14 16
Passo 13:si scambiano il primo e l’ultimo
elemento
![Page 51: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/51.jpg)
51 a.a. 2001/2002
Esempio (14)
1
7 3
4 2 8 9
10 14 16
Passo 14:la parte da ordinare si riduce ai primi n-5
elementi
![Page 52: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/52.jpg)
52 a.a. 2001/2002
Esempio (15)
7
4 3
1 2 8 9
10 14 16
Passo 15:si trasforma la parte da ordinare in uno
heap
![Page 53: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/53.jpg)
53 a.a. 2001/2002
Esempio (16)
2
4 3
1 7 8 9
10 14 16
Passo 16:si scambiano il primo e l’ultimo
elemento
![Page 54: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/54.jpg)
54 a.a. 2001/2002
Esempio (17)
2
4 3
1 7 8 9
10 14 16
Passo 17:la parte da ordinare si riduce ai primi n-6
elementi
![Page 55: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/55.jpg)
55 a.a. 2001/2002
Complessità
L’algoritmo di heapsort richiama n-1 volte la procedura Heapify, che ha complessità O(lg n).
Di conseguenza la complessità dell’algoritmo è O(n lg n).
![Page 56: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/56.jpg)
56 a.a. 2001/2002
Sommario
• Gli heap
• L’algoritmo Heapsort
• Le code con priorità.
![Page 57: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/57.jpg)
57 a.a. 2001/2002
Code con priorità
Una coda con priorità è una struttura dati su cui sono definite le seguenti operazioni:
• INSERT(S, x): inserisce l’elemento x nell’insieme S
• MAXIMUM(S): restituisce l’elemento di S con chiave massima
• EXTRACT-MAX(S): restituisce e rimuove da S l’elemento di S con chiave massima.
Le code con priorità trovano numerose applicazioni pratiche.
![Page 58: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/58.jpg)
58 a.a. 2001/2002
Code con priorità e heap
Gli heap sono le strutture più adatte ad implementare delle code con priorità.
L’operazione MAXIMUM(S) corrisponde semplicemente a restituire l’elemento radice.
L’operazione INSERT(S,x) corrisponde ad un normale inserimento in uno heap, e può essere eseguita tramite la seguente procedura Heap-Insert.
L’operazione EXTRACT-MAX(S) corrisponde all’eliminazione della radice da uno heap, e può essere eseguita tramite la seguente procedura Heap-Extract-Max.
![Page 59: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/59.jpg)
59 a.a. 2001/2002
Heap-Insert
Complessità: O(lg n)
![Page 60: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/60.jpg)
60 a.a. 2001/2002
Esempio (0)
16
14 10
8 7 9 3
2 4 1
Si vuole aggiungere un elemento con chiave 15.
![Page 61: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/61.jpg)
61 a.a. 2001/2002
Esempio (1)
16
14 10
8 7 9 3
2 4 1 15
Si aggiunge l’elemento in fondo
all’albero.
![Page 62: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/62.jpg)
62 a.a. 2001/2002
Esempio (2)
16
14 10
8 15 9 3
2 4 1 7
Si confronta con il padre e se
necessario si scambia.
![Page 63: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/63.jpg)
63 a.a. 2001/2002
Esempio (3)
16
15 10
8 14 9 3
2 4 1 7
Si confronta con il padre e se
necessario si scambia.
![Page 64: 1 a.a. 2001/2002 Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino](https://reader035.vdocuments.pub/reader035/viewer/2022062418/5542eb59497959361e8c5838/html5/thumbnails/64.jpg)
64 a.a. 2001/2002
Heap-Extract-Max Complessità:
O(lg n)