Progettare algoritmi veloci usando strutture dati efficienti

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
Code a priorità (Heap) Definizione
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Heap binari e HeapSort.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Progettare algoritmi.
Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Quinta giornata Risolvere efficientemente un problema in P: ancora sulla sequenza di Fibonacci.
Capitolo 4 Ordinamento: lower bound Ω(n log n) e MergeSort ((*) l’intera lezione) Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Prog21 Alberi binari (radicati e ordinati) Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5.
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
Code con priorità Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture Dati
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Heapsort.
Alberi n-ary Lezioni di C.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
MergeSort Usa la tecnica del divide et impera:
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
concetti ed applicazioni
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Progettare algoritmi veloci usando strutture dati efficienti Un esempio: HeapSort Copyright © 2004 - The McGraw - Hill Companies, srl

HeapSort Stesso approccio incrementale del selectionSort Tipo di dato 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 Copyright © 2004 - The McGraw - Hill Companies, srl

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 Copyright © 2004 - The McGraw - Hill Companies, srl

albero binario completo albero binario (non completo)

HeapSort 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) Copyright © 2004 - The McGraw - Hill Companies, srl

…un esempio il massimo è contenuto nella radice! 16 il massimo è contenuto nella radice! 14 10 In questa direzione è presente un ordinamento 8 7 9 3 2 4 1 In questa direzione non è presente un ordinamento Copyright © 2004 - The McGraw - Hill Companies, srl

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 Copyright © 2004 - The McGraw - Hill Companies, srl

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

Struttura dati heap Rappresentazione con vettore posizionale sin(i) = 2i des(i) = 2i+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] Copyright © 2004 - The McGraw - Hill Companies, srl

…ancora un esempio i=1 16 2 3 14 10 4 5 6 7 8 7 9 3 8 9 10 2 4 1 i=1 2 Length[A] 16 14 10 8 7 9 3 2 4 1 … … … Heap-size[A] Heap-size[A]  Length[A] Copyright © 2004 - The McGraw - Hill Companies, srl

La procedura fixHeap Tempo di esecuzione: O(log n) 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ì: fixHeap(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) fixHeap(u,H) Tempo di esecuzione: O(log n) Copyright © 2004 - The McGraw - Hill Companies, srl

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

uno pseudocodice di fixHeap più dettagliato (l’heap è mantenuto attraverso un vettore posizionale) fixHeap (i,A) s=sin(i) d=des(i) if (s  heapsize[A] e A[s] >A[i]) then massimo=s else massimo=i if (d  heapsize[A] e A[d] >A[massimo]) then massimo=d if (massimoi) then scambia A[i] e A[massimo] fixHeap(massimo,A)

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 fixHeap sulla radice Tempo di esecuzione: O(log n) Copyright © 2004 - The McGraw - Hill Companies, srl

Estrazione del massimo 16 2 3 14 10 4 5 6 7 8 7 9 3 8 9 10 2 4 1

Estrazione del massimo 16 1 2 3 14 10 4 5 6 7 8 7 9 3 8 9 2 4

Estrazione del massimo 16 14 2 3 8 10 4 5 6 7 4 7 9 3 8 9 2 1

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) fixHeap(radice di H,H) Copyright © 2004 - The McGraw - Hill Companies, srl

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

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

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

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

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’ 2n 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(2n)=O(n) Copyright © 2004 - The McGraw - Hill Companies, srl

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  Copyright © 2004 - The McGraw - Hill Companies, srl

L’algoritmo HeapSort 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 Copyright © 2004 - The McGraw - Hill Companies, srl

ordina in loco in tempo O(n log n) heapSort (A) Heapify(A) Heapsize[A]=n for i=n down to 2 do scambia A[1] e A[i] Heapsize[A] = Heapsize[A] -1 fixHeap(1,A) O(n) n-1 estrazioni di costo O(log n) ordina in loco in tempo O(n log n) Copyright © 2004 - The McGraw - Hill Companies, srl

Esempio Input: A=<4,1,3,2,16,9,10,14,8,7> Heapify(A)  A0 =<16,14,10,8,7,9,3,2,4,1> Scambia(A[1],A[n]) i=1 16 2 3 14 10 4 5 6 7 8 7 9 3 8 9 10 2 4 1 Copyright © 2004 - The McGraw - Hill Companies, srl

heapsize = heapsize -1 fixHeap(1,A) i=1 1 2 3 14 10 4 5 6 7 8 7 9 3 8 16 fixHeap(1,A) i=1 14 2 3 8 10 4 5 6 7 4 7 9 3 8 9 10 2 1 16 Copyright © 2004 - The McGraw - Hill Companies, srl

Scambia(A[1],A[n-1]) heapsize = heapsize -1 14 10 8 3 9 7 4 16 1 2 i=1 5 Scambia(A[1],A[n-1]) heapsize = heapsize -1 i=1 1 2 3 8 10 4 5 6 7 4 7 9 3 8 9 10 2 14 16 Copyright © 2004 - The McGraw - Hill Companies, srl

E così via, sino ad arrivare a fixHeap(1,A) i=1 10 2 3 8 9 4 5 6 7 4 7 1 3 8 9 10 2 14 16 E così via, sino ad arrivare a 1 2 3 4 7 8 9 10 14 16 Copyright © 2004 - The McGraw - Hill Companies, srl

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 solo memoria costante!  Copyright © 2004 - The McGraw - Hill Companies, srl