heap concetti ed applicazioni. maggio 2002asd - heap2 heap heap = catasta condizione di heap...
TRANSCRIPT
![Page 1: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/1.jpg)
heap
concetti ed applicazioni
![Page 2: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/2.jpg)
maggio 2002 ASD - Heap 2
heap
• heap = catasta• condizione di heap
1. albero binario perfettamente bilanciato2. tutte le foglie sono “a sinistra”
• ma non è un BST!!
3. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli
• non è una struttura ordinata– le visite in ampiezza e in pre- in- post-ordine
non forniscono un ordinamento delle chiavi
![Page 3: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/3.jpg)
maggio 2002 ASD - Heap 3
heap?
67 68
89
661
66 65
66 5
66 67
4 64
67 68
89
21
66 65
3 4
66
5 6
67
6767
67 67
67 67
89
67
1
66 65
![Page 4: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/4.jpg)
maggio 2002 ASD - Heap 4
max- e min-heap• la struttura
definita è detta max-heap
• variante: min-heap– ogni nodo contiene
una chiave minore o eguale di quelle presenti negli eventuali figli
13 22
6
3223
13 23
33 24
44 27
56 81
min-heap
![Page 5: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/5.jpg)
maggio 2002 ASD - Heap 5
operazioni su un (max-)heap
• insert chiave– inserisce nuova chiave nello heap
• occorre mantenere la condizione di heap
• deleteMax– cancella chiave max dallo heap
• occorre mantenere la condizione di heap
• getMax– restituisce la chiave max nello heap
• non modifica lo heap
![Page 6: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/6.jpg)
maggio 2002 ASD - Heap 6
rappresentazione degli heap
• tutte le rappresentazione usate per gli alberi binarie sono ammissibili– rappresentazione collegata,
eventualmente con puntatori figli-genitore
– rappresentazione tramite array• particolarmente efficiente
![Page 7: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/7.jpg)
maggio 2002
rappresentazione tramite array• ogni nodo v è memorizzato in posizione
p(v)– se v è la radice allora p(v)=0 – se v è il figlio sinistro di u allora p(v)=2p(u)
+1– se v è il figlio destro di u allora
p(v)=2p(u)+2
67 68
89
431
66 65
21 5
66 67
4 64
6566671432154
66686789
64
4
5
6
7
8
9
10
11
3
2
1
0
12
![Page 8: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/8.jpg)
maggio 2002 ASD - Heap 8
heap su array• vantaggi
– grande efficienza in termini di spazio• l’occupazione può essere minima
– facilità di navigazione• genitore i -> figli j
– j = 2i + 1, 2i + 2• figlio i -> genitore j
– j = (i – 1) / 2
• svantaggio– implementazione statica
• possono essere necessari progressivi raddoppiamenti/dimezzamenti dell’array di supporto
![Page 9: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/9.jpg)
maggio 2002 ASD - Heap 9
rappresentazione in Javapublic class Heap {public static final int DEFAULTCAPACITY = 50;private int[] storage;private int size;public Heap() {this(DEFAULTCAPACITY);
}public Heap(int dim) {storage = new int[dim];size = 0;
}// metodi…
![Page 10: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/10.jpg)
maggio 2002 ASD - Heap 10
rappresentazione in Java/2public boolean isLeaf(int i) {return getLeftIndex(i) >= size;
}public boolean isRoot(int i) {return i == 0;
}public boolean isEmpty() {return size == 0;
}public boolean isFull() {return size == storage.length;
}
![Page 11: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/11.jpg)
maggio 2002 ASD - Heap 11
rappresentazione in Java/3private int getLeftIndex(int i) {return 2 * i + 1;
}private int getRightIndex(int i) {return getLeftIndex(i) + 1;
}private int getParentIndex(int i) {return (i - 1) / 2;
}public String toString() {…}// implementazione delle operazioni
fondamentali}
![Page 12: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/12.jpg)
maggio 2002 ASD - Heap 12
algoritmi su heap
• operazioni– getMax– insert – deleteMax
• altri algoritmi– Array2Heap
• conversione di un array in heap
– HeapSort• ordinamento di un array basato su heap
![Page 13: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/13.jpg)
maggio 2002 ASD - Heap 13
getMax
• il max è contenuto nella cella 0 dell’array• operazione di costo costante O(1)
public int getMax() throws Exception {if(!isEmpty())
return storage[0];else
throw new Exception("getMax requested to empty heap");}
![Page 14: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/14.jpg)
maggio 2002 ASD - Heap 14
insert
1. inserisci elemento alla fine dello heap
2. while (elemento non è radice) and (elemento > genitore(elemento))
3. scambia elemento con genitore
![Page 15: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/15.jpg)
maggio 2002 ASD - Heap 15
insert/2
![Page 16: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/16.jpg)
maggio 2002 ASD - Heap 16
insert/3Algorithm insert(int k) {
storage[size] = k;int i = size++;int j = getParentIndex(i);while(!isRoot(i) && (storage[i] >
storage[j])) {exchange(i, j); // scambia celle di
storagei = j;j = getParentIndex(i);
}}
![Page 17: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/17.jpg)
maggio 2002 ASD - Heap 17
Heapify(i)
• operazione heapify(i)• considera l'albero avente radice nella
cella i e, qualora non rispetti la condizione di heap attraverso una sequenza di scambi
• while (i non è foglia) and (i < un figlio)
• scambia i con il suo figlio maggiore
![Page 18: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/18.jpg)
maggio 2002 ASD - Heap 18
Heapifypublic void heapify(int i) {
if(isLeaf(i))return;
else {int j = 0; // inizializzazione
fittizia per tacitare compilatoretry {
j = getMaxChildIndex(i);}catch(Exception e) {
// only if i is a leaf.... already checked
}if(storage[i] < storage[j])
exchange(i, j);heapify(j);
} }
![Page 19: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/19.jpg)
maggio 2002 ASD - Heap 19
deleteMax 1
1. sostituisci primo elemento con ultima foglia ed elimina ultima foglia
1. Invoca Heapify sulla radice
![Page 20: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/20.jpg)
maggio 2002 ASD - Heap 20
deleteMax/2
![Page 21: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/21.jpg)
maggio 2002 ASD - Heap 21
heap e code di priorità
• una coda di priorità è un tipo astratto con le seguenti operazioni– enqueue, inserimento in coda– dequeue, estrazione dalla coda
dell’elemento avente priorità max• la priorità è in genere espressa da un intero
• gli heap sono strutture di dati eccellenti per l’implementazione di code di priorità
![Page 22: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/22.jpg)
maggio 2002 ASD - Heap 22
Heapsort/1
• Ordinamento di un insieme di n interi
• Costruisci l’Heap inserendo gli elementi nell’Heap con insert. Complessità: O(n log n)
• Applica ripetutuamente deleteMax Complessità: O(n log n)
![Page 23: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/23.jpg)
maggio 2002 ASD - Heap 23
Heapsort/2public static void heapSort(int[] data) {
Heap aHeap = array2heap(data);for(int i = aHeap.size - 1; i > 0; i--)
{aHeap.exchange(0, i);aHeap.size--;aHeap.heapify(0);
}System.arraycopy(aHeap.storage, 0, data,
0, aHeap.storage.length);}
![Page 24: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/24.jpg)
maggio 2002 ASD - Heap 24
Costruzione di un Heap in O(n)/11. Disponi l’insieme di elementi in un array2. For (i= indice ultimo nodo non foglia; i>=0,
i--)3. Invoca heapify (i)
public static Heap array2heap(int[] data) {Heap aHeap = new Heap(data.length);aHeap.size = data.length;System.arraycopy(data, 0,
aHeap.storage, 0, data.length);for(int i =
aHeap.getParentIndex(aHeap.size-1); i >= 0; i--)
aHeap.heapify(i);return aHeap;
}
![Page 25: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/25.jpg)
maggio 2002 ASD - Heap 25
![Page 26: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/26.jpg)
maggio 2002 ASD - Heap 26
Costruzione di un Heap in O(n)/2
• Assumi n=2k-1, heap di k-1 livelli• Heapify invocata (n+1)/2 volte sui nodi dal penultimo livello fino al primo. • (n+1)/4 nodi del penultimo livello. • Heapify richiede al più 1 scambio• (n+1)/2i di livello k-i-1.• Heapify su nodo di livello k-i-1 provoca al
più i-1 scambi
![Page 27: Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie](https://reader036.vdocuments.site/reader036/viewer/2022070313/5542eb76497959361e8dfb0f/html5/thumbnails/27.jpg)
maggio 2002 ASD - Heap 27
Costruzione di un Heap in O(n)/2
• Heap di n nodi ha al più lg(n) livelli • i-esimo livello dal basso:
(n+1)/2i nodi i-1 scambi compiuti da Heapify
)(2
1)1()1(
2
)1()1lg(
2
)1lg(
2
nOi
ninn
i
n
iii