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
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 ottimi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
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 Stesso approccio.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
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 Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
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 Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Boruvka Algoritmi.
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 Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Capitolo 6 Alberi di ricerca 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 8 Code con.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
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 Soluzione esercizio.
Capitolo 13 Cammini minimi: Algoritmo di ordinamento topologico, di Dijkstra, e di Floyd e Warshall Algoritmi e Strutture Dati.
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
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,
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
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi e Strutture Dati
La gestione degli insiemi disgiunti
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
K4 è planare? E K3,3 e K5 sono planari? Sì!
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Heapsort.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
* 07/16/96 Sez. 2: Ordinamento La consultazione di banche dati è sempre più cruciale in tutte le applicazioni dell’Informatica. Se vogliamo consultare.
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.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
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:

Algoritmi e Strutture Dati Capitolo 8 Code con priorità

Tipo di dato CodaPriorità (1/2) Suppongo sempre che mi venga dato un riferimento diretto all’elemento da cancellare Copyright © 2004 - The McGraw - Hill Companies, srl

Operazioni aggiuntive Tipo di dato CodaPriorità (2/2) Operazioni aggiuntive Applicazioni: gestione code in risorse condivise, gestione priorità in processi concorrenti, progettazione di algoritmi efficienti per diversi problemi fondamentali (es: calcolo cammini minimi in un grafo), ecc. Copyright © 2004 - The McGraw - Hill Companies, srl

Quattro implementazioni elementari Array non ordinato Array ordinato Lista non ordinata Lista ordinata Ci focalizzeremo soltanto sulle operazioni di base. Copyright © 2004 - The McGraw - Hill Companies, srl

Array non ordinato FindMin: Θ(n) (devo guardare tutti gli elementi) Lo dimensiono sufficientemente grande e tengo traccia del numero n di elementi nella coda in una variabile di appoggio FindMin: Θ(n) (devo guardare tutti gli elementi) Insert: O(1) (inserisco in coda) Delete: O(1) (poiché mi viene fornito il riferimento diretto all’elemento da cancellare, lo posso cancellare in O(1) sovracopiando l’ultimo elemento) DeleteMin: Θ(n) (devo prima cercare il minimo in Θ(n), poi lo posso cancellare in O(1)) Copyright © 2004 - The McGraw - Hill Companies, srl

Array ordinato FindMin: O(1) Lo dimensiono sufficientemente grande, lo tengo ordinato in ordine decrescente e tengo traccia del numero n di elementi nella coda in una variabile di appoggio FindMin: O(1) Insert: O(n) (trovo in Θ(log n) la giusta posizione, ma poi devo fare O(n) spostamenti) Delete: O(n) (devo fare O(n) spostamenti) DeleteMin: O(1) (l’elemento minimo è in fondo all’array, non devo fare spostamenti) Copyright © 2004 - The McGraw - Hill Companies, srl

Lista non ordinata FindMin: Θ(n) (devo guardare tutti gli elementi) La considero bidirezionale elemento FindMin: Θ(n) (devo guardare tutti gli elementi) Insert: O(1) (inserisco in coda o in testa) Delete: O(1) (poiché mi viene fornito il riferimento diretto all’elemento da cancellare, lo posso cancellare in O(1) agendo sui puntatori) DeleteMin: Θ(n) (devo prima cercare il minimo in Θ(n), poi lo posso cancellare in O(1)) Copyright © 2004 - The McGraw - Hill Companies, srl

Lista ordinata FindMin: O(1) (il minimo è in testa alla lista) Tengo la lista bidirezionale ordinata in ordine crescente FindMin: O(1) (il minimo è in testa alla lista) Insert: O(n) (trovo in O(n) la giusta posizione, e poi faccio in O(1) l’inserimento) Delete: O(1) (agisco sui puntatori) DeleteMin: O(1) (basta far puntare la testa della lista al secondo elemento della lista stessa) Copyright © 2004 - The McGraw - Hill Companies, srl

Riepilogo implementazioni elementari FindMin Insert Delete DeleteMin Array non ord. Θ(n) O(1) Array ordinato O(n) Lista non ordinata Lista Copyright © 2004 - The McGraw - Hill Companies, srl

Tre implementazioni evolute d-heap: generalizzazione degli heap binari visti per l’ordinamento Heap binomiali Heap di Fibonacci (cenni) Copyright © 2004 - The McGraw - Hill Companies, srl

d-heap Copyright © 2004 - The McGraw - Hill Companies, srl

Definizione Un d-heap è un albero radicato d-ario con le seguenti proprietà: Struttura: è completo almeno fino al penultimo livello, e tutte le foglie sull’ultimo livello sono compattate verso sinistra Contenuto informativo: ogni nodo v contiene un elemento elem(v) ed una chiave chiave(v) presa da un dominio totalmente ordinato Ordinamento parziale (inverso) dell’heap (min-heap): chiave(v) ≥ chiave(parent(v)) per ogni nodo v diverso dalla radice Copyright © 2004 - The McGraw - Hill Companies, srl

Esempio Heap d-ario con 18 nodi e d=3 Copyright © 2004 - The McGraw - Hill Companies, srl

Proprietà Un d-heap con n nodi ha altezza Θ(logd n) La radice contiene l’elemento con chiave minima (per via della proprietà di ordinamento a heap) Può essere rappresentato implicitamente tramite vettore posizionale grazie alla proprietà di struttura Copyright © 2004 - The McGraw - Hill Companies, srl

Procedure ausiliarie Utili per ripristinare la proprietà di ordinamento a heap su un nodo v che non la soddisfi T(n)=O(logd n) il vecchio amico FixHeap! T(n)=O(d logd n) Copyright © 2004 - The McGraw - Hill Companies, srl

findMin T(n)=O(1) Copyright © 2004 - The McGraw - Hill Companies, srl

insert(elem e, chiave k) 5 16 9 30 17 10 15 35 40 20 25 Insert(e,8)

insert(elem e, chiave k) 5 16 9 30 17 10 15 35 40 8 20 25 Insert(e,8)

insert(elem e, chiave k) 5 16 9 30 17 8 15 35 40 10 20 25 Insert(e,8)

insert(elem e, chiave k) 5 16 8 30 17 9 15 35 40 25 10 20 Insert(e,8)

insert(elem e, chiave k) 5 16 8 30 17 9 15 35 40 25 10 20 Insert(e,8)

insert(elem e, chiave k) T(n)=O(logd n) per l’esecuzione di muoviAlto Copyright © 2004 - The McGraw - Hill Companies, srl

delete(elem e) e deleteMin 5 delete 16 8 30 17 9 15 35 40 20 25 10

delete(elem e) e deleteMin 5 16 10 30 17 9 15 35 40 20 25

delete(elem e) e deleteMin 5 16 9 30 17 10 15 35 40 20 25

delete(elem e) e deleteMin 5 16 9 30 17 10 15 35 40 20 25

delete(elem e) e deleteMin 5 16 delete 8 30 17 9 15 35 40 20 25 10

delete(elem e) e deleteMin 5 16 8 30 10 9 15 35 40 20 25

delete(elem e) e deleteMin 5 10 8 30 16 9 15 35 40 20 25

delete(elem e) e deleteMin 5 10 8 30 16 9 15 35 40 20 25

delete(elem e) e deleteMin T(n)= O(logd n) o O(d logd n) per l’esecuzione di muoviAlto o muoviBasso Può essere usata anche per implementare la cancellazione del minimo, con costo O(d logd n) Copyright © 2004 - The McGraw - Hill Companies, srl

decreaseKey(elem e, chiave d) 5 decrementa di 27 16 8 30 17 9 15 35 40 20 25 10 Copyright © 2004 - The McGraw - Hill Companies, srl

decreaseKey(elem e, chiave d) 5 16 8 3 17 9 15 35 40 20 25 10 Copyright © 2004 - The McGraw - Hill Companies, srl

decreaseKey(elem e, chiave d) 5 3 8 16 17 9 15 35 40 10 20 25 Copyright © 2004 - The McGraw - Hill Companies, srl

decreaseKey(elem e, chiave d) 3 5 8 16 17 9 15 35 40 20 25 10 Copyright © 2004 - The McGraw - Hill Companies, srl

decreaseKey(elem e, chiave d) 3 5 8 16 17 9 15 35 40 20 25 10 Copyright © 2004 - The McGraw - Hill Companies, srl

decreaseKey(elem e, chiave d) T(n)=O(logd n) per l’esecuzione di muoviAlto Copyright © 2004 - The McGraw - Hill Companies, srl

increaseKey(elem e, chiave d) incrementa di 14 5 16 8 30 17 9 15 35 40 20 25 10

increaseKey(elem e, chiave d) 5 30 8 30 17 9 15 35 40 10 20 25

increaseKey(elem e, chiave d) 5 17 8 30 30 9 15 35 40 20 25 10

increaseKey(elem e, chiave d) 5 17 8 30 20 9 15 35 40 30 25 10

increaseKey(elem e, chiave d) 5 17 8 30 20 9 15 35 40 30 25 10

increaseKey(elem e, chiave d) T(n)=O(d logd n) per l’esecuzione di muoviBasso Copyright © 2004 - The McGraw - Hill Companies, srl

T(n)= d T(n/d)+O(d logdn) merge(CodaPriorità c1, CodaPriorità c2) Analogamente a quanto mostrato per l’heap binario, la creazione di un heap d-ario (con d costante) di n elementi può essere eseguita in Θ(n). Infatti, il tempo di esecuzione di heapify diventa ora: T(n)= d T(n/d)+O(d logdn) ove il fattore O(d logdn) è relativo all’esecuzione della procedura muoviBasso (fixheap nell’heap binario). Siamo quindi di nuovo nel Caso 1 del Teorema Master:  Il merge viene quindi eseguito in Θ(n), ove n=|c1|+|c2|, generando un nuovo heap d-ario che contiene tutti gli elementi in c1 e c2 logdd - e logdd d logdn=f(n)=O(n ) per >0, e quindi T(n) = Q(n ) = Θ(n) Copyright © 2004 - The McGraw - Hill Companies, srl

Esercizio Fornire un’implementazione alternativa dell’operazione di merge, analizzandone la convenienza asintotica rispetto all’implementazione appena fornita. Copyright © 2004 - The McGraw - Hill Companies, srl

Soluzione esercizio di approfondimento Fornire un’implementazione alternativa dell’operazione di merge(CodaPriorità c1, CodaPriorità c2), analizzandone la convenienza asintotica rispetto all’implementazione appena fornita (di costo (n)). Soluzione: Sia k=min{|c1|,|c2|}. Inseriamo ad uno ad uno tutti gli elementi della coda più piccola nella coda più grande; questo costa O(k log n), dove n=|c1|+|c2|. L’approccio conviene quindi per k log n=o(n), cioè per k=o(n/log n). 46 Copyright © 2004 - The McGraw - Hill Companies, srl

Algoritmi e Strutture Dati Capitolo 8 Code con priorità: Heap binomiali Copyright © 2004 - The McGraw - Hill Companies, srl 47

Riepilogo FindMin Insert Delete DelMin Incr. Key Decr. merge Array non ord. Θ(n) O(1) O(n) Array ordinato Lista non ordinata Lista ordinata d-Heap O(logdn) O(d logdn)  Il nostro obiettivo è implementare una coda di priorità con una struttura dati che non comporti costi lineari! Copyright © 2004 - The McGraw - Hill Companies, srl

Alberi binomiali Un albero binomiale Bh è definito ricorsivamente come segue: B0 consiste di un unico nodo Per i>0, Bi+1 è ottenuto fondendo due alberi binomiali Bi, ponendo la radice dell’uno come figlia della radice dell’altro Copyright © 2004 - The McGraw - Hill Companies, srl

Proprietà strutturali Dimostrazione per induzione su h Copyright © 2004 - The McGraw - Hill Companies, srl

Definizione di heap binomiale Un heap binomiale è una foresta di alberi binomiali che gode delle seguenti proprietà: Unicità: per ogni intero i≥0, esiste al più un Bi nella foresta Contenuto informativo: ogni nodo v contiene un elemento elem(v) ed una chiave chiave(v) presa da un dominio totalmente ordinato Ordinamento a heap: chiave(v) ≥ chiave(parent(v)) per ogni nodo v diverso da una delle radici Copyright © 2004 - The McGraw - Hill Companies, srl

Un esempio di Heap Binomiale con n=13 nodi in questa direzione non è presente un ordinamento 10 1 6 25 in questa direzione è presente un ordinamento 12 8 14 29 18 17 11 38 27

Proprietà topologiche Dalla proprietà di unicità degli alberi binomiali che lo costituiscono, ne deriva che un heap binomiale di n elementi è formato dagli alberi binomiali Bi0, Bi1, …, Bih,, dove i0, i1,…, ih corrispondono alle posizioni degli 1 nella rappresentazione in base 2 di n.  Ne consegue che in un heap binomiale con n nodi, vi sono al più log n alberi binomiali, ciascuno con grado ed altezza O(log n) Copyright © 2004 - The McGraw - Hill Companies, srl

Un esempio di Heap Binomiale con n=13 nodi B0 B2 B3 10 1 6 25 12 8 14 29 18 17 11 38 27 13=20+22+23 13 in binario: 1101

una rappresentazione collegata Copyright © 2004 - The McGraw - Hill Companies, srl

(ogni fusione diminuisce di uno il numero di alberi binomiali) Procedura ausiliaria Utile per ripristinare la proprietà di unicità in un heap binomiale (ipotizziamo di scorrere la lista delle radici da sinistra verso destra, in ordine crescente rispetto all’indice degli alberi binomiali) T(n): lineare nel numero di alberi binomiali in input (ogni fusione diminuisce di uno il numero di alberi binomiali)

Ristruttura(H) 12 7 3 15 18 25 37 H 28 33 12 18 7 3 15 41 25 37 28 33 12 3 15 41 18 7 37 28 33 25 41 12 3 18 15 7 37 28 33 25 41

Realizzazione (1/3) Copyright © 2004 - The McGraw - Hill Companies, srl

Realizzazione (2/3) Copyright © 2004 - The McGraw - Hill Companies, srl

Realizzazione (3/3) Tutte le operazioni richiedono tempo T(n) = O(log n) Durante l’esecuzione della procedura ristruttura esistono infatti al più tre Bi, per ogni i ≥ 0 Copyright © 2004 - The McGraw - Hill Companies, srl

DeleteMin(H) H 1 25 7 33 28 41 15 18 37 3 12

DeleteMin(H) H fondi ristruttura 18 25 7 33 28 41 15 12 37 3 25 7 33

…decremento di una chiave 10 1 6 12 25 8 14 29 decrKey(10) 18 11 17 38 27 10 1 6 12 25 8 14 29 18 1 17 38 27

…decremento di una chiave 10 1 6 12 25 1 14 29 18 8 17 38 27 10 1 1 12 25 6 14 29 18 8 17 38 27

merge(H1,H2) H1 H2 fondi ristruttura 12 7 15 12 7 3 15 25 28 33 18 25 37 28 33 41 H2 41 18 3 merge(H1,H2) 37 12 3 15 fondi 18 7 37 28 33 ristruttura 25 41 12 18 7 3 15 25 3 37 12 28 33 18 15 7 37 41 28 33 25 41

Heap di Fibonacci (Fredman,Tarjan, 1987) Copyright © 2004 - The McGraw - Hill Companies, srl

Heap di Fibonacci Heap binomiale rilassato: si ottiene da un heap binomiale rilassando la proprietà di unicità dei Bi ed utilizzando un atteggiamento più “pigro” durante l’operazione insert (perché ristrutturare subito la foresta quando potremmo farlo dopo?) Heap di Fibonacci: si ottiene da un heap binomiale rilassato indebolendo la proprietà di struttura dei Bi che non sono più necessariamente alberi binomiali Analisi sofisticata: i tempi di esecuzione sono ammortizzati su sequenze di operazioni, cioè dividendo il costo complessivo della sequenza di operazioni per il numero di operazioni della sequenza Copyright © 2004 - The McGraw - Hill Companies, srl

Conclusioni: tabella riassuntiva FindMin Insert Delete DelMin IncKey DecKey merge d-Heap (d cost.) O(1) O(log n) O(n) Heap Binom. Heap Fibon. O(log n)* O(1)* L’analisi per d-Heap e Heap Binomiali è nel caso peggiore, mentre quella per gli Heap di Fibonacci è ammortizzata (per le operazioni asteriscate) Copyright © 2004 - The McGraw - Hill Companies, srl

Analisi ammortizzata Il costo ammortizzato di un’operazione è il costo “medio” rispetto a una (qualsiasi) sequenza di operazioni. Esempio: se un’operazione ha costo ammortizzato costante e eseguo una sequenza di k opearazioni è possibile che il costo di una singola operazione può non essere costante, ma l’intera sequenza costerà O(k) Diverso dal costo medio: non c’è nessuna distribuzione di probabilità (sulla sequenza da eseguire) e l’algoritmo è un algoritmo deterministico Molto utile quando si vogliono buone prestazioni sull’intera sequenza e non garanzie sulla singola operazione esempio: progettare algoritmi veloci attraverso strutture dati efficienti

…per esempio nel nostro caso: Teorema Usando un Heap di Fibonacci , una qualsiasi sequenza di n insert, d delete, f findMin, m deleteMin,  increaseKey,  decreaseKey,  merge prende tempo (nel caso peggiore) O(n+f+++(d+m+)log n )

Esercizio (di manipolazione) Creare ed unire 2 Heap Binomiali sui seguenti insiemi: A1={3,5,7,21,2,4} A2={1,11,6,22,13,12,23,31} Copyright © 2004 - The McGraw - Hill Companies, srl