Algoritmi e Strutture Dati

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture dati Mod B
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Cammini minimi con una sorgente
Cammini minimi con sorgente singola
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 Stesso approccio.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento 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. 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 Strutture dati per.
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.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall 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 Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi 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.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
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 Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie.
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 Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
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 K 4 è planare? Sì!
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.
Cammini minimi da un sorgente
Algoritmi e Strutture Dati
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Algoritmo di ordinamento topologico, di Dijkstra, e di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: algoritmo di Dijkstra Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Cammini minimi fra tutte le coppie:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 13 Cammini minimi: algoritmo di Dijkstra Algoritmi e Strutture Dati.
Transcript della presentazione:

Algoritmi e Strutture Dati Grafi e Cammini minimi

Definizioni Sia G=(V,E) un grafo orientato con costi w sugli archi; w: E→R. Il costo di un cammino p=<v0,v1,v2,… ,vk> è dato da: Un cammino minimo tra una coppia di vertici x,y è un cammino di costo minore o uguale a quello di ogni altro cammino tra gli stessi vertici. Copyright © 2008 - The McGraw - Hill Companies, srl

Proprietà dei cammini minimi Sottostruttura ottima: ogni sottocammino di un cammino minimo è anch’esso minimo Questa proprietà permette di applicare tecniche di programmazione Greedy e Dinamica, assicurando soluzioni ottime: a partire da sottocammini minimi si perviene a cammini minimi. In generale potrebbe esistere più di un cammino minimo tra una stessa coppia di vertici. A noi interesserà uno qualunque Nel caso di grafi orientati con pesi reali, si potrebbero avere cicli caratterizzati da un costo negativo; in tal caso la soluzione ottima potrebbe essere -∞ (cicli infiniti !!!!) Non vengono mai considerati grafi con cicli aventi costo minore di zero Copyright © 2008 - The McGraw - Hill Companies, srl

Distanza fra vertici Sia G=(V,E) un grafo orientato con costi w sugli archi; w: E→R. La distanza dxy tra due vertici x e y in G è: il costo di un cammino minimo tra da x a y, o +∞ se i due vertici x e y non sono connessi Caso Particolare: la distanza di un vertice da se stesso è 0 Copyright © 2008 - The McGraw - Hill Companies, srl

Distanza fra vertici Disuguaglianza triangolare: per ogni x, y e z in V vale sempre la relazione: Condizione di Bellman: per ogni arco (u,v) in E e per ogni vertice s in V, vale: Copyright © 2008 - The McGraw - Hill Companies, srl

Calcolare un cammino minimo Obiettivo: calcolare il cammino minimo <v0, v1,.., vk>, con v0=x e vk=y Un arco (u,v) appartiene ad un cammino minimo tra s e v se e solo se la condizione di Bellman vale con l’eguaglianza: dsu+w(u,v)=dsv O(δout*k) O(n*k) caso peggiore Copyright © 2008 - The McGraw - Hill Companies, srl

Algoritmi per il Calcolo del Cammino Minimo Ci sono diverse varianti Sorgente/Destinazione Cammino minimo tra una singola coppia Cammini minimi a sorgente singola (da un vertice a tutti gli altri) Cammini minimi tra tutte le coppie Tipologia di Grafo Cammini minimi per generico grafo orientato con funzione costo reale Cammini minimi per grafi orientati aciclici con funzione costo reale Cammini minimi per generico grafo orientato ma con funzione costo maggiore o uguale a zero Copyright © 2008 - The McGraw - Hill Companies, srl

Alberi di Cammini Minimi Come memorizzare i cammini minimi a partire da una sorgente s ? Soluzione ovvia: liste di vertici, una lista per ogni destinazione Spazio: (n cammini di lunghezza max O(n) = O(n2)) Soluzione migliore: I cammini minimi da un vertice s a tutti gli altri vertici del grafo possono essere rappresentati tramite un albero radicato in s, detto albero dei cammini minimi Spazio: vettore/lista di O(n) elementi Copyright © 2008 - The McGraw - Hill Companies, srl

Alberi di Cammini Minimi Esempio: Vettore di n elementi * A B C E F G A B C D E Si basa sul Lemma che ogni sottocammino di un cammino minimo è esso stesso un cammino minimo Copyright © 2008 - The McGraw - Hill Companies, srl

Tecnica del Rilassamento Tutti gli algoritmi che vedremo nel seguito si basano sulla tecnica del rilassamento Si parte da stime per eccesso delle distanze Dxy ≥ dxy Si aggiornano le stime, decrementandole progressivamente fino a renderle esatte. Aggiornamento delle stime basato sul seguente passo di rilassamento: Copyright © 2008 - The McGraw - Hill Companies, srl

Algoritmo di Bellman e Ford Algoritmo generico per qualunque grafo orientato G=(V,E) con funzione costo w: E→R Calcola Cammini Minimi a Sorgente singola Copyright © 2008 - The McGraw - Hill Companies, srl

Approccio di Bellman e Ford Sia p =< s,v1,v2,… ,vk > un cammino minimo. Se fossimo in grado di eseguire i passi di rilassamento nell’ordine seguente: in k passi avremmo la soluzione. Purtroppo non conosciamo l’ordine giusto, essendo p ignoto Copyright © 2008 - The McGraw - Hill Companies, srl

Approccio di Bellman e Ford Esegue n passate In ciascuna passata rilassa tutti gli archi Dopo la j-esima passata, i primi j rilassamenti corretti sono stati certamente eseguiti Esegue però molti rilassamenti inutili! Copyright © 2008 - The McGraw - Hill Companies, srl

Approccio di Bellman e Ford Pseudocodice Tempo di esecuzione: O(n m) Copyright © 2008 - The McGraw - Hill Companies, srl

Variante dell’Algoritmo di Bellman e Ford per Grafi Aciclici Si applica per cammini minimi a sorgente singola Sfrutta il fatto che non vi sono cicli, dunque se esiste un cammino da u a v, non può esistere il cammino da v a u Sulla base di questa proprietà, l’algoritmo “rilassa” gli archi sulla base di un precedente ordinamento topologico Ogni arco viene rilassato solo una volta ! Copyright © 2008 - The McGraw - Hill Companies, srl

Ordinamento topologico Funzione s: V  {1, … n} tale che s(u)< s(v) se esiste un cammino da u a v in G Esiste solo e solo se G è aciclico Si costruisce a partire da un vertice che non ha archi entranti L’ordinamento topologico non è unico !!! Copyright © 2008 - The McGraw - Hill Companies, srl

Calcolo di un ordinamento topologico Tempo di esecuzione: O(n+m) Copyright © 2008 - The McGraw - Hill Companies, srl

Variante dell’Algoritmo di Bellman e Ford per Grafi Aciclici Eseguire i rilassamenti in ordine topologico Ogni arco viene rilassato solo una volta ! Tempo di esecuzione: O(n+m) Copyright © 2008 - The McGraw - Hill Companies, srl

Algoritmo di Dijkstra Calcolo dei cammini minimi: a sorgente singola in grafi orientati G=(V,E) ciclici (può contenere cicli) Gli archi devono avere costi non negativi, ossia ad ogni arco è associata la funzione costo w: E → R+ {0} Copyright © 2008 - The McGraw - Hill Companies, srl

Principio di Funzionamento: Estensione dell’albero dei cammini minimi Lemma: Se T è un albero dei cammini minimi radicato in s che non include tutti i vertici raggiungibili da s, l’arco (u,v) tale che uT e vT che minimizza la quantità dsu+w(u,v) appartiene a un cammino minimo da s a v Copyright © 2008 - The McGraw - Hill Companies, srl

Approccio di Dijkstra Si suppone che ogni vertice sia raggiungibile da s All’inizio l’albero T contiene solo s Si applica per (n-1) volte: Scegli un arco (u,v) con uT e vT che minimizza la quantità Dsu+w(u,v), effettua il passo di rilassamento Dsv  Dsu+w(u,v), ed aggiungilo a T algoritmo DijkstraGenerico(grafo G, vertice s) → T inizializza D tale che Dsv=+∞ per v≠s e Dss=0 T←albero formato solo da s while (T ha meno di n nodi) do trova l’arco (u,v) incidente su T con Dsu+w(u,v) minimo Dsv  Dsu+w(u,v) {rilassamento} rendi u padre di v in T return T Copyright © 2008 - The McGraw - Hill Companies, srl

Esempio (1/2) Copyright © 2008 - The McGraw - Hill Companies, srl

Esempio (2/2) Copyright © 2008 - The McGraw - Hill Companies, srl

Implementazione con Code con Priorità Operazione cruciale: selezione dell’arco (u,v) con uT e vT che minimizza la quantità Dsu+w(u,v) Per ogni nodo u, significa fare m calcoli O(m) Totale complessità O(m*n), eccessiva!!!! Soluzione: uso code con priorità; complessità varia da O(m*logn) a O(m+n*logn) Copyright © 2008 - The McGraw - Hill Companies, srl

Implementazione con Code con Priorità Uso della coda di priorità Min per gestire l’arco (u,v) con uT e vT Si preferisce mantenere vertici invece che archi (al più n elementi in coda) la coda memorizzerà solo il vertice v, che minimizza la quantità Dsu+w(u,v) il valore di ogni elemento della coda è il vertice v La priorità di ogni elemento della coda è la quantità Dsu+w(u,v) Se il vertice v già esiste in coda e trovo un altro arco (u,v) per cui la quantità Dsu+w(u,v) diminuisce, allora devo aggiornare la priorità dell’elemento v Si usa una funzione delle code di priorità Min: DecreaseKey Copyright © 2008 - The McGraw - Hill Companies, srl

Pseudocodice Copyright © 2008 - The McGraw - Hill Companies, srl

Tempo di esecuzione Al più: n insert, n*O(log n) n deleteMin, n*O(log n) (m-n) decreaseKey, (m-n)*O(log n) O(m log n) utilizzando heap O(m+n log n) utilizzando heap di Fibonacci (DecreaseKey O(1)) Copyright © 2008 - The McGraw - Hill Companies, srl

Algoritmo di Floyd e Warshall Algoritmo generico per qualunque grafo orientato G=(V,E) con funzione costo w: E→R Calcola Cammini Minimi tra tutte le coppie Tempo di esecuzione: O(n3) Copyright © 2008 - The McGraw - Hill Companies, srl

Riepilogo Algoritmi classici per il calcolo di distanze (e quindi di cammini minimi), basati sulla tecnica del rilassamento: Bellman e Ford: cammini minimi a sorgente singola, grafi diretti senza cicli negativi, tempo O(nm) Grafi diretti aciclici: tempo O(n+m) Dijkstra: cammini minimi a sorgente singola, grafi diretti senza pesi negativi, tempo O(m+n log n) Floyd e Warshall: cammini minimi tra tutte le coppie in tempo O(n3) Copyright © 2008 - The McGraw - Hill Companies, srl