Depth-first search Visita in profondità di un grafo Algoritmo Esempio

Slides:



Advertisements
Presentazioni simili
Flusso Massimo Applicazione di algoritmi
Advertisements

Algoritmi e Strutture dati Mod B
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Applicazioni progettuali di grafica computerizzata a.a. 2008/2009
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 (Mod. B)
Cammini minimi con una sorgente
Rappresentazione di grafi
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
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Esercizi su alberi binari
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
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.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Grafi.
Esempi di possibili domande per il compito di esame 1.Indicare un esempio di caso peggiore per lalgoritmo di Quicksort. 2.Scrivere un metodo per il calcolo.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Grafi.
Algoritmi e Strutture Dati
Grafi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Usi (meno scontati) della visita DFS
Componenti fortemente connesse
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Grafi Rappresentazione mediante liste di adiacenza:
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Ordinamento topologico Cammino minimo dalla 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.
Grafi CORDA – Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Ordinamento topologico
Olimpiadi di Informatica 2010 Giornate preparatorie
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Algoritmi elementari su grafi
Ordinamento topologico
Flusso Massimo Applicazione di algoritmi
Componenti fortemente connesse
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Grafi: rappresentazione e visita
Algoritmi e Strutture Dati
Cammini minimi fra tutte le coppie:
Cammini minimi in grafi:
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
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.
K4 è planare? E K3,3 e K5 sono planari? Sì!
Transcript della presentazione:

Depth-first search Visita in profondità di un grafo Algoritmo Esempio Complessità dell’algoritmo Proprietà Ordinamento topologico

Depth-first search Dato un grafo G=(V,E) e un specifico vertice s chiamato sorgente, la visita in profondità (in inglese depth-first search) esplora il grafo andando ogni volta il più possibile in profondità. Per ogni vertice v in visita si prosegue la visita sugli archi non ancora esplorati. Se sul vertice v in visita si sono esplorati tutti gli archi si torna al vertice di origine. Se sul grafo rimane qualche vertice non scoperto si ricomincia la visita in profondità su quel vertice. L’intero processo è ripetuto finché non vengono scoperti tutti i vertici del grafo.

Depth-first search Strutture dati utilizzate: Liste di adiacenza Adj: per conoscere i vertici adiacenti a un vertice. color[u]: per colora il vertice u di bianco (vertice non scoperto), di grigio (vertice appena scoperto) e di nero (ha finito di visitare la lista di Adiacenza). p[u]: il predecessore di u nella foresta DFS. d[u]: tempo in cui viene scoperto u. f[u]: tempo in cui viene finita la visita in u. Si ha d[u]<f[u]. Nota: u è bianco (WHITE) prima di d[u], grigio (GRAY) tra d[u] e f[u], infine nero (BLACK) dopo f[u].

Algoritmo DFS(G,s) for ogni vertice u in V[G] // inizializzazione di ogni vertice do color[u] ← WHITE p[u] ← NIL time ← 0 for ogni vertice u in V[G] do if color[u] = WHITE then DFS-VISIT(u) // visita da ogni vertice non ancora scoperto DFS-VISIT(u) color[u] ← GRAY // vertice diventa grigio, appena scoperto d[u] ← time // tempo inizio visita lista adiacenza time ← time + 1 for ogni vertice v in Adj[u] do if color[v] = WHITE then p[v] ← u DFS-VISIT(v) // visita subito vertice non ancora scoperto color[u] ← BLACK // vertice diventa nero, ha visitato tutta l’adiacenza f[u] ← time // tempo fine visita lista adiacenza

Esempio 1/ 1/ 2/ 1/ 2/ 3/ 1/ 2/ 1/ 2/ 1/ 2/ 4/ 3/ 4/ 3/ 4/5 3/ 1/ 2/ u v w u v w u v w 1/ 1/ 2/ 1/ 2/ (a) (b) (c) 3/ x y z x y z x y z u v w u v w u v w 1/ 2/ 1/ 2/ 1/ 2/ (d) (e) (f) 4/ 3/ 4/ 3/ 4/5 3/ x y z x y z x y z u v w u v w u v w 1/ 2/ 1/ 2/7 1/ 2/7 (g) (h) (i) 4/5 3/6 4/5 3/6 4/5 3/6 x y z x y z x y z

Esempio 1/8 1/8 2/7 9/ 1/8 2/7 9/ 2/7 4/5 3/6 4/5 3/6 4/5 3/6 1/8 2/7 u v w u v w u v w 1/8 1/8 2/7 9/ 1/8 2/7 9/ 2/7 (m) (n) (l) 4/5 3/6 4/5 3/6 4/5 3/6 x y z x y z x y z u v w u v w u v w 1/8 2/7 9/ 1/8 2/7 9/ 1/8 2/7 9/ (o) (p) (q) 4/5 3/6 10/ 4/5 3/6 10/ 4/5 3/6 10/11 x y z x y z x y z u v w 1/8 2/7 9/12 (r) 4/5 3/6 10/11 x y z

Complessità Analisi del tempo di esecuzione: Ci sono due cicli in DFS() che vengono eseguiti Θ(|V|) volte. DFS-VISIT(u) viene eseguito esattamente una volta per ogni vertice in V. Durante l’esecuzione di DFS-VISIT(u) il ciclo nelle linee 4-7 viene eseguito |Adj[u]| volte. Poiché la somma di tutte le liste di adiacenza è Θ(|E|), si ha che il costo totale del ciclo in DFS-VISIT() è Θ(|E|). Quindi, il tempo totale di esecuzione è Θ(|V| + |E|). Nota: come per il BFS si definisce degli alberi DFS corrispondente al sottografo Gp definito da vettore p.

Proprietà Teorema delle parentesi In ogni visita in profondità di un grafo G=(V,E), per ogni coppia di nodi u,v in V, con A=[d[u], f[u]] e B=[d[v], f[v]]. Allora una e una sola delle seguenti condizioni è vera: e u è discendente di v in un albero DFS. e v è discendente di u in un albero DFS.

Proprietà Caso d[u] < d[v]: Dimostrazione Caso d[u] < d[v]: Se d[v] < f[u], allora u diventa grigio prima di v, ma quando viene scoperto v la visita ad u non è stata completata. Questo implica che v è un discendente di u. Poiché v è stato scoperto più recentemente di u, la visita in v deve completarsi prima di ritornare a u, f[v] < f[u]. Quindi l’intervallo [d[v], f[v]] è completamente contenuto in [d[u], f[u]]. Se f[u] < d[v], allora u diventa nero prima di v, ossia quando viene scoperto v la visita ad u è stata completata. (d[v]<f[v]) Quindi l’intervallo [d[v], f[v]] è disgiunto da [d[u], f[u]]. Caso d[v] < d[u]: simmetrico.

Proprietà Teorema delle cammino bianco In una foresta DFS di un grafo G=(V,E) un vertice v è discendente di u se e solo se al tempo d[u] in cui la visita scopre u, il vertice v è raggiungibile da u con un cammino contenete esclusivamente nodi bianchi. dimostrazione “v discendente di u” => allora sia w un qualunque vertice del cammino tra v e u. Si ha per il teorema delle parentesi d[u] < d[w] < d[v]. Quindi, per come è strutturato l’algoritmo w è ancora bianco quando viene scoperto u.

Proprietà “al tempo d[u] esiste un cammino bianco verso v” <= Si suppone per assurdo che v non diventi discendente di u. Con una sorta di dimostrazione per induzione si assuma che ogni altro nodo del cammino bianco divenga discendente di v. Prendiamo w adiacente a v e predecessore di v nel cammino bianco. w è discendente a u e prima che la visita a w finisca v verrà visitato perché v è bianco ed esiste un arco da w a v. Quindi, d[u] < d[w] < d[v] < f[w] < f[u]. Per il teorema delle parentesi v deve necessariamente essere discendente di u.

Proprietà Classificazione degli archi: Tree-edge (T, archi dell’albero): archi appartenenti alla foresta DFS. Back-edge (B, archi all’indietro): archi non appartenenti alla foresta DFS che vanno da un vertice v ad un suo antenato u in un albero DFS. Forward-edge (F, archi in avanti): archi non appartenenti alla foresta DFS che vanno da un vertice u ad un suo successore v in un albero DFS. Cross-edge (C, archi di attraversamento): tutti gli altri archi.

Proprietà Si modifica l’algoritmo DFS in modo che ogni arco (u,v) è: w T 1/8 2/7 9/12 T: Tree-edge B: Back-edge F: Forward-edge C: Cross-edge B C F T T 4/5 3/6 10/11 T x y z Si modifica l’algoritmo DFS in modo che ogni arco (u,v) è: WHITE (bianco): se appartiene ad un albero DFS. GRAY (grigio): se è un arco all’indietro (unisce due vertici grigi durante la DFS). BLACK (nero): se è un forward-edge (d[u] < d[v]) o un cross-edge (d[u] > d[v]). E’ un arco che va verso un vertice nero nel DFS().

Proprietà Nota: nel caso di grafo non orientato l’arco viene classificato secondo il tipo attribuito a quello tra (u,v) e (v,u) che viene incontrato per primo. Proposizione Se G è un grafo non orientato ogni arco o è un Tree-edge oppure è un Back-edge. Dimostrazione Sia (u,v) un arco arbitrario di G. Senza perdita di generalità, supponiamo d[u] < d[v]. Ci sono due casi:

Proprietà L’arco (u,v) viene visitato a partire da u, u grigio e v bianco. Allora (u,v) è classificato bianco (Tree-edge). L’arco (u,v) viene visitato a partire da v, u e v grigi. Allora (u,v) è classificato grigio (Back-edge). Proposizione Un grafo G contiene un ciclo se e solo se l’algoritmo DFS determina l’esistenza di un Back-edge. Dimostrazione <= Se (u,v) è un arco all’indietro, allora v è un antenato di u. Esiste un cammino da v a u e l’arco (u,v), non appartenente al cammino, completa il ciclo.

Proprietà => G ha un ciclo c. Sia v il primo vertice del ciclo c ad essere scoperto e sia (u,v) l’arco che lo precede in c. Al tempo d[v] tutti i nodi da v a u sono bianchi (v grigio). Per il teorema dei cammini bianchi il vertice u diventerà discendente i v. Durante la visita del vertice u l’arco (u,v) verrà necessariamente classificato come grigio (Back-edge, unisce due vertici grigi). u v c

Ordinamento Topologico Ingresso: un grafo orientato e aciclico (DAG: Direct Acyclic Graph) Uscita: una lista ordinata e lineare dei vertici di G <u1, u2, …, u|V|> tale che se G contiene l’arco orientato (u,v) allora nell’ordinamento u precede v. 1 2 2 1 3 4 4 3

Ordinamento Topologico TOPOLOGICAL-SORT(G) chiama DFS(G) per calcolare I tempi di fine visita f[v] per ogni vertice v appena la visita è finita inseriscilo in testa ad una lista concatenata restituisci la lista concatenata dei vertici DFS(G) richiede tempo Θ(|V| + |E|). L’inserimento di ognuno dei |V| vertici nella lista concatenata richiede tempo O(1). Quindi, si può eseguire un ordinamento topologico in tempo Θ(|V| + |E|).

Ordinamento Topologico Proposizione TOPOLOGICAL-SORT(G) produce un ordinamento topologico di un grafo orientato aciclico G. Dimostrazione Basta dimostrare che se G è aciclico, allora per ogni arco (u,v) in E si ha che f[u] > f[v]. Essendo aciclico, non esistono archi grigi (Back-edge). Allora (u,v) è bianco oppure nero. Se (u,v) è bianco allora f[v] < f[u] per il teorema delle parentesi. Se (u,v) è nero allora f[v] < f[u] perché v è già stato visitato prima di finire la visita in u.