Cammini minimi in grafi:

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture dati Mod B
Advertisements

Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Il problema del cammino minimo tra 2 nodi in un grafo non cooperativo
Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Il problema del minimo albero ricoprente in un grafo non cooperativo
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati
Cammini minimi con una sorgente
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Cammini minimi con sorgente singola
Algoritmi e Strutture Dati
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Algoritmi e Strutture Dati
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Il problema del minimo albero ricoprente in un grafo con archi privati
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.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Esercizi 5 Grafi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Usi (meno scontati) della visita DFS
Algoritmi e Strutture Dati
Cammini minimi tra tutte le coppie
Cammini minimi da un sorgente
Usi (meno scontati) della visita DFS. Informazioni utili: tenere il tempo clock=1 pre(v)=clock clock=clock+1 post(v)=clock; clock=clock+1 pre(v): tempo.
Usi (meno scontati) della visita DFS lezione basata sul capito 3 del libro Algorithms, di Dasgupta, Papadimitriou, Vazirani, McGraw-Hill.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Olimpiadi di Informatica 2010 Giornate preparatorie
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal (*) Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Meccanismi one-parameter: il problema dell’albero dei cammini minimi a sorgente singola.
Algoritmi e Strutture Dati
Prof. Cerulli – Dott. Carrabs
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.
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Capitolo 13 Cammini minimi Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi 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.
Algoritmi e Strutture Dati Luciano Gualà
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°10.
Capitolo 13 Cammini minimi: algoritmo di Dijkstra Algoritmi e Strutture Dati.
Cammini minimi in grafi:
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Cammini minimi in grafi:
Algoritmi e Strutture Dati
Transcript della presentazione:

Cammini minimi in grafi: Episodio III: la fine della trilogia

…nelle puntate precedenti Input: grafo pesato G=(V,E,w), sV Output: albero dei cammini minimi radicato in s e/o le distanze di tutti i nodi da s, ovvero, dsv per ogni vV 2 B D 2 s A 1 2 4 4 C E 2

…nelle puntate precedenti Input: grafo pesato G=(V,E,w), sV Output: albero dei cammini minimi radicato in s e/o le distanze di tutti i nodi da s, ovvero, dsv per ogni vV 2 4 2 B D 2 s A 1 2 4 4 C E 2 3 5

Nelle puntate precedenti: Visita BFS: albero dei cammini minimi per grafi non pesati. Tempo: O(m+n). Algoritmo di Dijkstra: grafi con pesi non negativi. Tempo: O(m+n log n) con heap di Fibonacci. Altre implementazioni meno efficienti: O(n2) - con array/liste non ordinate O(m log n) con heap binari/binomiali Algoritmo di Bellman-Ford: cammini minimi per grafi con pesi qualsiasi (senza cicli negativi). Tempo O(mn) – con liste di adiacenza. Algoritmo basato sull’ord. topologico: albero dei cammini minimi per DAG con pesi qualsiasi. Tempo O(m+n).

Cammini minimi fra tutte le coppie: Algoritmo di Floyd e Warshall e Algoritmo di Johnson

distanza fra tutte le coppie: soluzioni semplici grafi non pesati: eseguo n volte visita BFS: tempo O(mn) grafi con pesi non negativi: eseguo n volte Dijkstra: tempo: O(mn+n2 log n) grafi con pesi qualsiasi (senza cicli negativi) eseguo n volte Bellman-Ford tempo: O(mn2)

Algoritmo di Floyd e Warshall (cammini minimi fra tutte le coppie di nodi per grafi senza cicli negativi)

Approccio Elegante applicazione della tecnica della programmazione dinamica Numeriamo i vertici di G da 1 a n, cioè V={v1, v2, … vn}. Un cammino minimo k-vincolato da x a y è un cammino di costo minimo tra tutti i cammini da x a y che usano come vertici intermedi un sottoinsieme qualsiasi (anche vuoto) dei vertici Ik={v1, v2, … vk}. v1 3 1 7 4 v2 v3 v4 x y tra x e y il cammino minimo 0-vincolato è lungo + 1-vincolato è lungo + 2-vincolato è lungo 8: <x,v2,y> 3-vincolato è lungo 5: <x,v2,v3,y> 4-vincolato (ovvero senza vincoli) è lungo 5: <x,v2,v3,y> Idea di Floyd e Warshall (sottoproblemi): calcolare cammini minimi k-vincolati per k=0,1,…, n

cammino minimo k-vincolato non passa per vk Relazioni tra distanze vincolate k Sia dxy il costo di un cammino minimo k-vincolato da x a y. Valgono le seguenti proprietà: dxy= w(x,y) se (x,y)E, +∞ altrimenti d = d e d = d dxy= dxy k-1 k k-1 k xvk xvk vkx vkx n Per le proprietà di cui sopra e per la proprietà di minimalità dei sottocammini di cammini minimi, si ha: k k-1 k k k-1 k-1 k-1 d = min {d , d + d } = min {d , d + d } xy xy xvk vky xy xvk vky vk x y cammino minimo k-vincolato non passa per vk passa per vk k L’algoritmo calcola dxy incrementando k da 0 a n

Pseudocodice Tempo di esecuzione: (n3) (sia con liste di adiacenza che con matrice di adiacenza) D: Meglio di B&F ripetuto n volte? R: Sì! O(n3)=O(mn2) D: Meglio dell’applicazione ripetuta di Dijkstra? R: Utilizzando gli Heap di Fibonacci, n applicazioni dell’algoritmo di Dijkstra richiedono tempo O(mn+n2 log n) = O(n3). Quindi, Dijkstra è più efficiente. Però si applica solo su un sottoinsieme delle istanze ammissibili per F&W.

e se G contiene un ciclo di peso negativo posso accorgermene? Esercizio: pensarci…

Esempio: applicare l’algoritmo di Floyd e Warshall al seguente grafo: v1 v2 v4 v3 v5 5 -1 3 -4

Posso applicare F&W? Sì, non ci sono cicli negativi! Inizializziamo la matrice delle distanze: v1 v2 v4 v3 v5 5 -1 3 -4 D0 = D1 = D2 = D3 = D4 = D5 =

Algoritmo di Johnson Idea: rendere i pesi non negativi e poi applicare n volte l’algoritmo di Dijkstra riferimento: capito 25 del libro Introduzione agli algoritmi e strutture dati, di Cormen, Leiserson, Rivest, Stein McGraw-Hill

rendere i pesi non negativi: un primo tentativo -3 A B Idea: aggiungere un valore opportuno  al peso di tutti archi. -3 -2 aggiungo =3 C D 1 funziona? A C D B 4 1 3 no: non preservo i cammini minimi! cammini con un # diverso di archi cambiano costo in modo diverso

rendere i pesi non negativi: un primo tentativo -3 A B Idea: aggiungere un valore opportuno  al peso di tutti archi. cammino minimo fra A e C -3 -2 aggiungo =3 C D 1 funziona? A B no: non preservo i cammini minimi! cammino minimo fra A e C 3 1 cammini con un # diverso di archi cambiano costo in modo diverso C D 4

un modo migliore per ri-pesare gli archi: aggiungere pesi sui nodi Dato un grafo pesato G=(V,E,w) e una funzione h:V  R per ogni arco (u,v)E, definiamo un nuovo peso: wh(u,v)=w(u,v) + h(u)-h(v) wh(u,v)= w(u,v)+h(u)-h(v) w(u,v) u v u v h(u) h(v) notazione: d(u,v): distranza da u a v in G=(V,E,w) dh(u,v): distranza da u a v in G=(V,E,wh)

dh(u,v)=d(u,v)+h(u)-h(v) Lemma Un cammino p=<v1,v2, …, vk> è minimo in G=(V,E,w) se e solo è minimo in G=(V,E,wh) dim  i=1 k-1 wh(p) = wh(vi,vi+1)  i=1 k-1 = ( w(vi,vi+1) + h(vi) -h(vi+1) )  i=1 k-1  i=1 k-1 = w(vi,vi+1) + ( h(vi) -h(vi+1) ) = w(p) + h(v1) - h(vk) dh(u,v)=d(u,v)+h(u)-h(v)

scegliere h() in modo da rendere i pesi non negativi per ogni arco (u,v)E , vorremmo: wh(u,v)  0 w(u,v) + h(u)-h(v)  0 h(v)  h(u) + w(u,v) ricorda qualcosa? …la condizione di Bellman: d(s,v)  d(s,u) + w(u,v)

calcolare h() G=(V,E,wh) G=(V,E,w) s A C D B A B C D assunzione: G non ha cicli di peso negativo s aggiungo una sorgente fittizia s G=(V,E,wh) calcolo le distanze da s A C D B 1 -3 -2 -3 A B e le uso come funzione h() 1 1 C D -5 -4 G=(V,E,w) i pesi degli archi sono non negativi e i cammini minimi fra tutte le coppie sono preservati! Nota: per ogni arco (u,v): d(s,v)  d(s,u) + w(u,v) wh(u,v)  0

Algoritmo di Johnson Complessità: O(mn + n2log n) input: G=(V,E,w) %assunzione: G non ha cicli negativi output: distanze in G=(V,E,w) fra tutte le coppie costruisci G’=(V’,E’) aggiungendo un nodo s e tutti gli archi (s,v), vV di peso 0 Usa l’alg. di Bellman-Ford per trovare le distanze in G’=(V’,E’,w) da s e assegnale ad h(); ovvero: h(v)= d(s,v) vV Calcola le distanze fra tutte le coppie in G=(V,E,wh) usando n volte l’alg. di Dijkstra for each u,vV, do calcola la distanza in G=(V,E,w) da u a v: d(u,v)=dh(u,v)-h(u)+h(v) return (la matrice del)le distanze d(u,v) u,vV Complessità: O(mn + n2log n)

Sommario grafico Universo dei grafi Grafi non pesati:BFS Grafi senza cicli negativi: BF, FW e J Grafi aciclici: ordinamento topologico Grafi senza archi negativi: Dijkstra

Esercizio

Esercizio