Algoritmi e strutture dati Camil Demetrescu Irene Finocchi

  • Slides: 27
Download presentation
Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Progettare algoritmi veloci

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Progettare algoritmi veloci usando strutture dati efficienti Un esempio: Heap. Sort 1 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap. Sort •

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap. Sort • Stesso approccio incrementale del selection. Sort – seleziona gli elementi dal più grande al più piccolo – usa una struttura dati efficiente • estrazione in tempo O(log n) del massimo • Tipo di dato – Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es. inserisci, cancella, cerca) • Struttura dati – Organizzazione dei dati che permette di memorizzare la collezione e supportare le operazioni di un tipo di dato usando meno risorse di calcolo possibile • Cruciale: progettare una struttura dati H su cui eseguire efficientemente le operazioni: – dato un array A, generare velocemente H – trovare il più grande oggetto in H – cancellare il più grande oggetto da H 2 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Alberi: qualche altra

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Alberi: qualche altra definizione albero d-ario: albero in cui tutti i nodi interni hanno (al più) d figli d=2 albero binario un albero d-ario è completo: se tutti nodi interni hanno esattamente d figli e le foglie sono tutte allo stesso livello 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

albero binario completo albero binario (non completo)

albero binario completo albero binario (non completo)

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap. Sort •

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap. Sort • Struttura dati heap associata ad un insieme S = albero binario radicato con le seguenti proprietà: 1) completo fino al penultimo livello (struttura rafforzata: foglie sull’ultimo livello tutte compattate a sinistra) 2) gli elementi di S sono memorizzati nei nodi dell’albero (ogni nodo v memorizza uno e un solo elemento, denotato con chiave(v)) 3) chiave(padre(v)) ≥ chiave(v) per ogni nodo v (diverso dalla radice) 5 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un esempio 16

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un esempio 16 10 14 In questa direzione è presente un ordinamento 7 8 2 4 9 3 il massimo è contenuto nella radice! 1 In questa direzione non è presente un ordinamento 6 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà salienti degli

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà salienti degli heap 1) Il massimo è contenuto nella radice 2) L’albero ha altezza O(log n) 3) Gli heap con struttura rafforzata possono essere rappresentati in un array di dimensione pari a n 7 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Altezza di un heap Sia H un heap di n nodi e altezza h.

Altezza di un heap Sia H un heap di n nodi e altezza h. albero binario completo di altezza h-1 h h-1 n 1 + 2 i=0 i = 1 + 2 h -1= 2 h h log 2 n

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Struttura dati heap

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Struttura dati heap Rappresentazione con vettore posizionale sin(i) = 2 i des(i) = 2 i+1 padre(i)= i/2 è sufficiente un vettore di dimensione n in generale dimensione vettore diverso da numero elementi nello pseudocodice numero oggetti indicato con heapsize[A] 9 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …ancora un esempio

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …ancora un esempio i=1 16 2 3 14 10 4 5 8 7 8 9 10 2 4 1 6 7 9 3 i=1 2 3 4 5 6 7 8 9 10 … … Length[A] 16 14 10 8 7 9 3 2 4 1 … … … Heap-size[A] Length[A] 10 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano La procedura fix.

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano La procedura fix. Heap Sia v la radice di H. Assumi che i sottoalberi radicati nel figlio sinistro e destro di v sono heap, ma la proprietà di ordinamento delle chiavi non vale per v. Posso ripristinarla così: fix. Heap(nodo v, heap H) if (v non è una foglia) then sia u il figlio di v con chiave massima if ( chiave(v) < chiave(u) ) then scambia chiave(v) e chiave(u) fix. Heap(u, H) Tempo di esecuzione: O(log n) 11 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Fix. Heap - esempio i=1 4 2 3 16 10 4 5 14 7

Fix. Heap - esempio i=1 4 2 3 16 10 4 5 14 7 2 9 10 8 1 6 9 3 16 2 3 14 10 5 7 4 8 9 10 2 8 1 6 9 16 7 i=1 4 i=1 2 3 4 10 4 5 14 7 8 9 10 2 8 1 6 7 9 3 16 7 3 2 3 14 10 4 5 8 7 8 9 10 2 4 1 6 9 7 3

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano uno pseudocodice di

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano uno pseudocodice di fix. Heap più dettagliato (l’heap è mantenuto attraverso un vettore posizionale) fix. Heap (i, A) 1. s=sin(i) 2. d=des(i) 3. if (s heapsize[A] e A[s] >A[i]) 4. then massimo=s 5. else massimo=i 6. if (d heapsize[A] e A[d] >A[massimo]) 7. then massimo=d 8. if (massimo i) 9. then scambia A[i] e A[massimo] 10. fix. Heap(massimo, A)

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Estrazione del massimo

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Estrazione del massimo • Copia nella radice la chiave contenuta nella la foglia più a destra dell’ultimo livello – nota: è l’elemento in posizione n (n: dimensione heap) • Rimuovi la foglia • Ripristina la proprietà di ordinamento a heap richiamando fix. Heap sulla radice Tempo di esecuzione: O(log n) 14 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costruzione dell’heap Algoritmo

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costruzione dell’heap Algoritmo ricorsivo basato sulla tecnica del divide et impera heapify(heap H) if (H non è vuoto) then heapify(sottoalbero sinistro di H) heapify(sottoalbero destro di H) fix. Heap(radice di H, H) 15 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

i=1 Heapify – Un esempio 4 2 3 1 3 4 5 2 16

i=1 Heapify – Un esempio 4 2 3 1 3 4 5 2 16 6 i=1 7 9 4 10 2 3 1 8 9 10 14 8 7 3 4 5 14 16 8 9 10 2 8 7 6 9 7 10 i=1 4 2 3 1 3 4 5 14 16 8 9 10 2 8 7 16 6 9 7 10 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Heapify – Un esempio (2) i=1 4 2 3 16 3 4 5 14

Heapify – Un esempio (2) i=1 4 2 3 16 3 4 5 14 1 8 9 10 2 8 7 6 7 9 10 4 2 3 16 10 4 5 14 7 9 10 2 8 1 17 3 16 i=1 8 i=1 6 9 3 4 5 14 7 8 9 10 2 8 1 6 9 7 10 7 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

i=1 Heapify – Un esempio (3) 16 2 3 4 10 4 5 14

i=1 Heapify – Un esempio (3) 16 2 3 4 10 4 5 14 7 8 9 10 2 8 1 6 7 9 i=1 3 i=1 16 2 3 14 10 4 5 4 7 8 9 10 2 8 1 6 9 7 3 16 2 3 14 10 4 5 8 7 8 9 10 2 4 1 18 6 9 7 3 E’ un heap! Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Complessità heapify Sia

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Complessità heapify Sia h l’altezza di un heap con n elementi Sia n’ n l’intero tale che un heap con n’ elementi ha 1. altezza h 2. è completo fino all’ultimo livello Vale: T(n) T(n’) e n’ 2 n Tempo di esecuzione: T(n’)=2 T((n’-1)/2) + O(log n’) 2 T(n’/2) + O(log n’) T(n’) = O(n’) dal Teorema Master Quindi: T(n) T(n’) = O(n’)=O(2 n)=O(n) 19 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Max-Heap e Min-Heap

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Max-Heap e Min-Heap e se volessi una struttura dati che mi permette di estrarre il minimo velocemente invece del massimo? Semplice: costruisco un min-heap invertendo la proprietà di ordinamento delle chiavi. Cioè richiedo che chiave(padre(v)) chiave(v) per ogni v (diverso dalla radice) e come mai noi abbiamo progettato un max-heap e non un min-heap? …fra un po’ lo capiremo 20 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano L’algoritmo Heap. Sort

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano L’algoritmo Heap. Sort • Costruisce un heap tramite heapify • Estrae ripetutamente il massimo per n-1 volte – ad ogni estrazione memorizza il massimo nella posizione dell’array che si è appena liberata 21 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano heap. Sort (A)

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano heap. Sort (A) 1. Heapify(A) 2. Heapsize[A]=n 3. for i=n down to 2 do 4. scambia A[1] e A[i] 5. Heapsize[A] = Heapsize[A] -1 6. fix. Heap(1, A) O(n) n-1 estrazioni di costo O(log n) ordina in loco in tempo O(n log n) 22 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio Input: A=<4,

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio Input: A=<4, 1, 3, 2, 16, 9, 10, 14, 8, 7> Heapify(A) A 0 =<16, 14, 10, 8, 7, 9, 3, 2, 4, 1> Scambia(A[1], A[n]) i=1 16 23 2 3 14 10 4 5 8 7 8 9 10 2 4 1 6 9 7 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano heapsize = heapsize

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano heapsize = heapsize -1 i=1 1 2 3 14 10 4 5 8 7 8 9 10 2 4 16 fix. Heap(1, A) 6 7 9 3 i=1 14 24 2 3 8 10 4 5 4 7 8 9 10 2 1 16 6 9 7 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Scambia(A[1], A[n-1]) 2

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Scambia(A[1], A[n-1]) 2 8 4 4 5 7 9 1 8 2 2 8 4 4 25 5 7 9 14 3 10 6 9 7 3 10 16 heapsize = heapsize -1 8 2 i=1 14 i=1 1 3 10 6 9 7 3 10 16 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano fix. Heap(1, A)

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano fix. Heap(1, A) i=1 10 2 8 4 4 8 2 5 7 9 14 3 9 6 1 7 3 10 16 E così via, sino ad arrivare a 1 2 26 3 4 7 8 9 10 14 16 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Max-Heap e Min-Heap

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Max-Heap e Min-Heap Quindi: come mai abbiamo usato un max-heap e non un min-heap? Potevamo usare anche un min-heap? …l’uso del max-heap (implementato con un vettore posizionale) ci permette di usare memoria aggiuntiva costante! 27 Copyright © 2004 - The Mc. Graw - Hill Companies, srl