La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Albero BFS.

Presentazioni simili


Presentazione sul tema: "Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Albero BFS."— Transcript della presentazione:

1 Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Albero BFS

2 Grafo Un grafo G = (V,E) consiste in: - un insieme V di vertici (o nodi) - un insieme E di coppie di vertici, detti archi: ogni arco connette due vertici Esempio 1: V = {persone che vivono in Italia}, E = {coppie di persone che si sono strette la mano} [NON ORIENTATO] Esempio 2: V = {persone che vivono in Italia},E = { (x,y) tale che x ha inviato una mail a y} [ORIENTATO] V= {1,2,3,4,5,6,7}

3 Scopo e tipi di visita di un grafo Scopo: una visita (o attraversamento) di un grafo G permette di esaminare i nodi e gli archi di G in modo sistematico. Problema di base in molte applicazioni. Esistono varie tipologie di visite con diverse proprietà. In particolare: – visita in ampiezza (BFS = Breadth First Search) – visita in profondità (DFS = Depth First Search)

4 Breath-first search Dato un grafo G=(V,E) e un specifico vertice s chiamato sorgente, la visita in ampiezza esplora gli archi di G per scoprire ogni vertice che sia raggiungibile a partire da s. Essa calcola la distanza (ossia il numero minimo di archi) da s ad ogni vertice raggiungibile. Inoltre, produce un albero BFS che ha come radice s e comprende tutti vertici raggiungibili. Nellalbero BFS il cammino da s a v corrisponde ad un cammino minimo. Lalgoritmo funziona per grafi orientati e non orientati.

5 Breath-first search La visita in ampiezza esplora i nodi del grafo a partire da quelli a distanza 1 da s. Dopo aver visitato i nodi a distanza 1, visita quelli a distanza 2. E così via. 0 s 1 w 2 t 2 x 3 u y 1 r 2 v 2 3 Archi dellalbero BFS Cresce la distanza dalla sorgente Via via visita nodi più distanti dalla sorgente. distanza=1 distanza=2 distanza=3

6 Struttura dati 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 (vertice non più sulla frontiera dei vertici appena scoperti). d[u]: la distanza di u. Allinizio è. p[u]: il predecessore di u nellalbero BFS. Q: coda

7 Algoritmo BFS(G,s) 1. for ogni vertice u in V[G] – {s}// inizializzazione di ogni vertice 2. do color[u] WHITE 3. d[u] 4. p[u] NIL 5. colors[s] GRAY // si comincia dal vertice s 6. d[s] 0 7. p[s] NIL 8. Q {s}// Q= coda dei vertici grigi sulla frontiera Allinizio tutti i vertici sono bianchi e, successivamente, possono diventare grigi e poi neri. La visita in ampiezza costruisce un albero BFS che allinizio contiene solo la radice: il vertice sorgente s.

8 Algortimo 9. while Q Ø// termina quando la coda è vuota 10. do u head[Q]// prendi prossimo elemento dalla coda 11. for ogni vertice v in Adj[u]// scopri vertici bianchi adiacenti 12. do if color[v] = WHITE 13. then color[v] GRAY // diventano grigi 14. d[v] d[u] + 1 // la distanza è d[u] p[v] u // il predecessore è u 16. ENQUEUE(Q,v)// e vanno in Q 17. DEQUEUE(Q) 18. color[u] BLACK// u nero: non più sulla frontiera Un vertice viene scoperto, la prima volta che viene incontrato durante la visita: in tale istante esso cessa di essere bianco.

9 Esempio 0 s w t x u y r v (a) Q = {s} d[s] = 0 0 s 1 w t x u y 1 r v (b) Q = {w, r} d[w] = 1 d[r] = 1 0 s 1 w 2 t 2 x u y 1 r v (c) Q = {r, t, x} d[r] = 1 d[t] = 2 d[x] = 2 0 s 1 w 2 t 2 x u y 1 r 2 v (d) Q = {t, x, v} d[t] = 2 d[x] = 2 d[v] = 2 Terminata la visita dei nodi a distanza 1. Visita della sorgente. Stato iniziale: la sorgente è in Q.

10 Esempio 0 s 1 w 2 t 2 x 3 u 3 y 1 r 2 v (e) Q = {v, u, y} d[v] = 2 d[u] = 3 d[y] = 3 0 s 1 w 2 t 2 x 3 u y 1 r 2 v (d) Q = {x, v, u} d[x] = 2 d[v] = 2 d[u] = 3 0 s 1 w 2 t 2 x 3 u 3 y 1 r 2 v (g) Q = {y} d[y] = 3 0 s 1 w 2 t 2 x 3 u 3 y 1 r 2 v (f) Q = {u, y} d[u] = 3 d[y] = 3 0 s 1 w 2 t 2 x 3 u 3 y 1 r 2 v (h) Q = Ø Terminata la visita dei nodi a distanza 1. Terminata la visita dei nodi a distanza 2. Terminata la visita dei nodi a distanza 3. Terminata la visita del grafo G.

11 Complessità Analisi del tempo di esecuzione su un grafo G=(V,E): Il tempo necessario per linizializzazione è O(|V|), tempo O(1) per ogni vertice. Ogni nodo raggiungibile viene visitato 1 volta: Le operazioni di inserimento e rimozione dalla coda è O(1), quindi il tempo totale dedicato alle operazioni sulla coda è O(|V|). Di ogni vertice scoperto viene visitata tutta la lista di adiacenza, ossia quando il vertice è estratto dalla coda. Si sommano le lunghezze delle liste di adiacenza dei nodi visitati. Le somma delle liste di adiacenza di tutti i nodi è pari a Θ(|E|). Sommando il tempo di inizializzazione e il tempo per visitare i vertici, si ha che lalgoritmo di BFS() viene eseguito in tempo O(|V| + |E|).

12 Cammino minimo Si definisce la distanza minima δ(s,v) 0 da s a v come il numero minimo di archi per passare dal vertice s al vertice v. Quando δ(s,v) =, v risulta irraggiungibile partendo da s, ossia non esiste alcun cammino da s a v. Un cammino di lunghezza δ(s,v) da s a v è chiamato cammino minimo da s a v. (Possono esserci più cammini minimi!) Si ha la seguente proprietà: Per ogni arco (u,v) in E, δ(s,v) δ(s,u) +1. Nota: la visita BSF calcola la distanza minima di ogni nodo raggiungibile dalla sorgente s.

13 Nodi in coda Proposizione I nodi che entrano in Q sono tutti e soli i nodi u con δ(s,u) <, ossia tutti i nodi raggiungibili da s. Dimostrazione Se il nodo v entra in Q allora δ(s,v) <. Si procede per induzione sulli-esima iterazione delloperazione di ENQUEUE(). Per i = 0: nella coda si trova s δ(s,s) = 0 <. Per i > 0: Supponiamo vera la proposizione per ogni iterazione k

14 Nodi in coda I nodi bianchi v che vengono messi in coda appartengono ad Adj[u]. Si ha che per ipotesi induttiva δ(s,u) < (u è stato inserito alla k-esima iterazione, k < i ) e, inoltre, esiste larco (u,v). Quindi δ(s,v) δ(s,u) +1 <. Se δ(s,v) < allora il nodo v entra in Q. Si procede per induzione su δ(s,v) = i. Per δ(s,v) = 0: è vero! v = s. Per δ(s,v) = i>0: per ipotesi induttiva si ha che per ogni u tale che δ(s,u) < i u è entrato in coda.

15 Nodi in coda δ(s,v) <, quindi esiste un cammino minimo da s a v:, con v 0 = s e v i = v. Si ha che δ(s, v i-1 ) = i-1

16 Albero BFS Proposizione Il vettore p definisce un sottografo di G, Tp=(Vp,Ep), dove: Vp = {s e tutti v in V: p[v] NIL} Ep = {(p[v], v) in E: v in Vp - {s} } Tp è un albero (albero BFS). Inoltre la lunghezza del cammino tra s e u in Tp è δ(s,u). Corollario Se G è connesso (fortemente connesso nel caso di grafo orientato) allora Tp è un albero di copertura minima (minimum spanning tree), ossia vengono selezionati il numero minimo di archi per cui il sottografo risulta ancora connesso.

17 Albero BFS 0 s 1 w 2 t 2 x 3 u 3 y 1 r 2 v p(v)=r p(r)=s p(w)=sp(x)=wp(y)=x p(s)=NIL Radice p(t)=wp(u)=t Ecco lalbero BFS del grafo visto nellesempio: 0 s 1 w 2 t 2 x 3 u 3 y 1 r 2 v


Scaricare ppt "Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio Complessità dellalgoritmo Proprietà Albero BFS."

Presentazioni simili


Annunci Google