Algoritmi e Strutture Dati

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento 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. Italiano.
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.
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.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
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 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
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 Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
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 8 Code con.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) 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 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Capitolo 4 Ordinamento: Selection e Insertion Sort 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.
Heap binari e HeapSort.
Algoritmi e Strutture Dati
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 8 Code con priorità 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 Capitolo 4 Ordinamento:
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Capitolo 10 Tecniche algoritmiche 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 Copyright © The McGraw - Hill Companies, srl Capitolo 4 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 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.
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.
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
Progettare algoritmi veloci usando strutture dati efficienti
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Heapsort

Punto della situazione Problema dell’ordinamento: Lower bound – (n log n) Albero di decisione Upper bound – O(n log n) Mergesort (non in loco e complessità O(n log n)) Algoritmi quadratici: Insertion, Selection (in loco) Proviamo a costruire un nuovo algoritmo ottimo, che ordini in loco e che costi O(n log n)) Copyright © 2004 - The McGraw - Hill Companies, srl

HeapSort Stesso approccio incrementale (invertito) del SelectionSort seleziona gli elementi dal più grande al più piccolo… … ma usa una struttura dati efficiente (heap binario), per cui l’estrazione del prossimo massimo avviene in tempo O(log n), invece che O(n) Struttura dati (efficiente) Organizzazione specifica (e memorizzazione) di una collezione di dati che consente di supportare le operazioni previste su di essi usando meno risorse di calcolo possibile Obiettivo: progettare una struttura dati H su cui eseguire efficientemente le operazioni: dato un array A, genera H estrai il più grande oggetto da H ripristina l’organizzazione specifica dei dati in H (ovvero mantieni invariate le proprietà strutturali di 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

Heap Binario Struttura dati heap (catasta) binario associata ad un insieme totalmente ordinato S: albero binario radicato con le seguenti proprietà: 1) Quasi completo, ovvero completo fino al penultimo livello, con tutte le foglie sull’ultimo livello 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 (proprietà di ordinamento parziale dell’heap) 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 Ogni nodo interno contiene un valore maggiore o uguale del valore contenuto in tutti i suoi discendenti (deriva banalmente dalla proprietà di ordinamento parziale) L’elemento massimo è contenuto nella radice L’albero binario associato ad un heap di n elementi ha altezza (log n) Copyright © 2004 - The McGraw - Hill Companies, srl

Altezza di un heap binario Abbiamo già dimostrato (vedi LB per il problema dell’ordinamento) che un albero binario con k foglie in cui ogni nodo interno ha esattamente due figli, ha altezza h(k)  log k. Adesso vogliamo dimostrare che un albero binario quasi completo di n nodi in cui ogni nodo interno ha esattamente due figli (eccezion fatta per al più un nodo), ha altezza h:= h(n) = (log n) Ma se l’albero è completo: n = 1 +2 + 22 + … + 2h-1 + 2h = (somma parziale h-esima della serie geometrica di ragione 2) = (1-2h+1)/(1-2) = 2h+1–1 Quindi, se l’albero è quasi completo: 2h -1 < n ≤ 2h+1 –1  h = log n  h = (log n) Copyright © 2004 - The McGraw - Hill Companies, srl

chiave(padre(v)) ≤ chiave(v) per ogni nodo v Osservazione La struttura dati presentata è più propriamente denominata max-heap, per via del fatto che il massimo è contenuto nella radice In alcuni contesti, avrà più senso definire la struttura duale min-heap, in cui la relazione di ordine parziale diventa: chiave(padre(v)) ≤ chiave(v) per ogni nodo v e conseguentemente la radice conterrà il minimo. Copyright © 2004 - The McGraw - Hill Companies, srl

Rappresentazione con array 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] (che può essere minore della dimensione dell’array) Copyright © 2004 - The McGraw - Hill Companies, srl

La procedura fixHeap Tempo di esecuzione: O(h)=O(log n) Sia H dato in forma di albero binario. Se tutti i nodi di H tranne v soddisfano la proprietà di ordinamento parziale dell’heap (N.B.: significa che v è l’unico nodo il cui valore è MINORE di quello di almeno uno dei figli), possiamo riaggiustare l’heap come segue: fixHeap(nodo v, heap H) if (v è una foglia) then return else 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(h)=O(log n) Copyright © 2004 - The McGraw - Hill Companies, srl

i=1 fixHeap - esempio 16 2 3 4 10 4 5 6 7 i=1 14 7 9 3 16 2 3 8 9 10 14 10 2 8 1 4 5 6 7 4 7 9 3 8 9 10 2 8 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

Pseudocodice di fixHeap per l’array posizionale fixHeap (i, array 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) Copyright © 2004 - The McGraw - Hill Companies, srl

Costruzione dell’heap Osservazione: fixHeap opera solo sul sottoalbero radicato nel nodo su cui viene chiamata  se in quel sottoalbero è solo la radice a violare la proprietà di ordinamento parziale, alla fine della procedura il sottoalbero viene correttamente riaggiustato  posso pensare di costruire un heap applicando ricorsivamente in modo bottom-up e right-to-left la procedura di fixHeap! Heapify: Algoritmo ricorsivo basato sul divide et impera per la costruzione dell’heap H in forma di albero binario. heapify(heap H) if (H è vuoto) then return else heapify(sottoalbero sinistro di H) heapify(sottoalbero destro di H) fixHeap(radice di H,H) La versione per l’array posizionale è del tutto analoga Copyright © 2004 - The McGraw - Hill Companies, srl

Esempio Input: A=<4,1,3,2,16,9,10,14,8,7> Procedendo bottom-up e right-to-left arrivo senza fare nulla fino al nodo 16, poiché scorro tutte le foglie; sul nodo 16, la fixHeap non fa nulla perché 16>7 4 1 3 2 16 9 10 14 8 7 Copyright © 2004 - The McGraw - Hill Companies, srl

Passo quindi al nodo 3, e lo scambio col 10 Passo quindi al nodo 2, e questa volta lo scambio col 14, perché 2<14 4 1 3 2 14 16 9 10 14 2 8 7 Passo quindi al nodo 3, e lo scambio col 10 4 1 10 14 16 9 3 2 8 7 Copyright © 2004 - The McGraw - Hill Companies, srl

Passo quindi al nodo 1, e lo faccio ridiscendere come in figura 4 16 10 14 7 9 3 2 8 1 Infine passo al nodo 4, e lo faccio ridiscendere come in figura 16 14 10 8 7 9 3 2 4 1 Input: A=<4,1,3,2,16,9,10,14,8,7> Heapify(A)  A =<16,14,10,8,7,9,3,2,4,1> Copyright © 2004 - The McGraw - Hill Companies, srl

Complessità heapify se f(n)=O(n ) per >0, allora T(n) = Q(n )) Tempo di esecuzione: T(n) = 2T(n/2)+O(log n) T(n) = Q(n) (caso 1 del Teorema Master: logba - e logba se f(n)=O(n ) per >0, allora T(n) = Q(n )) Copyright © 2004 - The McGraw - Hill Companies, srl

Estrazione del massimo Leggi e memorizza la chiave contenuta nella radice Copia nella radice la chiave contenuta nella 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

L’algoritmo HeapSort Q(n) + n-1 estrazioni di costo O(log n) Costruisce un heap (in forma di array posizionale) tramite heapify Estrae ripetutamente il massimo per n-1 volte (ad ogni estrazione memorizza il massimo nella posizione dell’array che si è appena liberata) 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) Q(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

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 Esercizio: È possibile definire un’istanza di input su cui l’HeapSort costa o(n log n)? Risposta: NO (se gli elementi sono distinti): Si può dimostrare che nel caso migliore l’HeapSort richiede circa ½ n log n operazioni  Copyright © 2004 - The McGraw - Hill Companies, srl