La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Depth-first search Visita in profondità di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Ordinamento topologico.

Presentazioni simili


Presentazione sul tema: "Depth-first search Visita in profondità di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Ordinamento topologico."— Transcript della presentazione:

1 Depth-first search Visita in profondità di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Ordinamento topologico

2 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 (padre). Se sul grafo rimane qualche vertice non scoperto si ricomincia la visita in profondità su uno di quei vertici. Lintero processo è ripetuto finché non vengono scoperti tutti i vertici del grafo.

3 Depth-first search Strutture dati utilizzate: Liste di adiacenza Adj: per conoscere i vertici adiacenti a un vertice. color[u]: si colora il vertice u di bianco (vertice non scoperto), di grigio (vertice appena scoperto) e di nero (ha finito di visitare tutta la sua 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]

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

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

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

7 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 lesecuzione 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 dal vettore p.

8 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à

9 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 lintervallo [d[v], f[v]] è completamente contenuto in [d[u], f[u]]. Proprietà d[u]d[v]f[v]f[u] u nero dopo aver scoperto v Allora v è discendente di u: la visita di v deve completarsi prima di quella di u d[u] < f[u] d[v] < f[v]

10 Dimostrazione Caso d[u] < d[v] 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]

11 Teorema del 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. Proprietà d[u]/ u v Cammino bianco da u a v. v discendente di u

12 Classificazione degli archi: Tree-edge (T, archi dellalbero): archi appartenenti alla foresta DFS. Back-edge (B, archi allindietro): 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à

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

14 Nota: nel caso di grafo non orientato larco viene classificato come larco orientato (u,v) oppure (v,u), a seconda di quale dei due viene scoperto 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à

15 1.Larco (u,v) viene visitato a partire da u, u grigio e v bianco. Allora (u,v) è classificato bianco (Tree-edge). 2.Larco (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 lalgoritmo DFS determina lesistenza di un Back-edge. Dimostrazione <= Se (u,v) è un arco allindietro, allora v è un antenato di u. Esiste un cammino da v a u e larco (u,v), non appartenente al cammino, completa il ciclo. Proprietà

16 => G ha un ciclo c. Sia v il primo vertice del ciclo c ad essere scoperto e sia (u,v) larco 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 larco (u,v) verrà necessariamente classificato come grigio (Back-edge, unisce due vertici grigi). Proprietà vu c

17 Ordinamento Topologico Ingresso: un grafo orientato e aciclico (DAG: Direct Acyclic Graph) Uscita: una lista ordinata e lineare dei vertici di G tale che se G contiene larco orientato (u,v) allora nellordinamento u precede v oppure

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

19 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[u] > f[v] per il teorema delle parentesi. Se (u,v) è nero allora f[u] > f[v] perché v è già stato visitato prima di finire la visita in u. Ordinamento Topologico


Scaricare ppt "Depth-first search Visita in profondità di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Ordinamento topologico."

Presentazioni simili


Annunci Google