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 Breath-first search Dato un grafo G=(V,E) e un specifico vertice s chiamato sorgente, la visita in ampiezza (in inglese breath-first search) esplora sistematicamente gli archi di G per scoprire ogni vertice che sia raggiungibile 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 uncammino minimo. Lalgoritmo funziona per grafi orientati e non orientati.

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

4 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}// 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.

5 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.

6 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

7 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 = Ø

8 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. Le operazioni di inserimento e rimozione dalla coda è O(1), quindi il tempo totale dedicato alle operazioni sulla coda è O(|V|) (ogni vertice diventa grigio solo una volta). La lista di adiacenza di ogni vertice viene scandita solo quando il vertice è estratto dalla coda, ossia al massimo una volta sola. Le somma di tutte le liste di adiacenza è 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|).

9 Cammino minimo Si definisce la distanza minima δ(s,v) 0 da s a v come il numero minimo di archi di un cammino dal vertice s al vertice v, oppure δ(s,v) = se non esiste nessun cammino da s a v. Quando δ(s,v) =, v risulta irraggiungibile partendo da s. Un cammino di lunghezza δ(s,v) da s a v è chiamato cammino minimo da s a v. Si ha la seguente proprietà: Per ogni arco (u,v) in E, δ(s,v) δ(s,u) +1.

10 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) <. Per induzione sulli-esima iterazione di ENQUEUE(). Per i = 0, δ(s,s) = 0 <. Supponiamo vero per k

11 Nodi in coda Si ha che per ipotesi induttiva δ(s,u) = k < e, inoltre, esiste larco (u,v). Quindi δ(s,v) δ(s,u) +1 <. Se δ(s,v) < allora il nodo v entra in Q. Per induzione su δ(s,v) = i. Per δ(s,v) = 0, è vero solo per v = s. Si ha che se δ(s,u) = i-1, allora u entra in coda per ipotesi induttiva. δ(s,v) <, quindi esiste un cammino minimo da s a v.

12 Nodi in coda Esiste un cammino, con v 0 = s e v i = v. Si ha che δ(s, v i-1 ) = i-1. v i-1 entra in coda per ipotesi induttiva. Quindi quando verrà visitato la lista di adiacenza di v i-1 : a) v è bianco e verrà messo in coda b) v è già stato messo in coda Corollario Se il grafo è connesso (o fortemente connesso nel caso di grafo orientato) allora tutti i nodi vengono messi in coda.

13 Proprietà Proposizione Per ogni i1, allinizio delli-esima iterazione del ciclo while si ha: a)Per ogni v n nero, v g grigio, v b bianco δ(s, v n ) δ(s, v g ) δ(s, v b ) b)Per ogni nodo v nella coda d[v]=δ(s, v) c)Se la coda Q contiene i vertici {v 1, v 2,…,v r } dove v 1 è la testa della coda e v r è il fondo. Allora d[v r ] d[v 1 ] + 1 e d[v i ] d[v i+1 ] per i=1, 2,…,r-1

14 Proprietà Dimostrazione Si dimostra per induzione sui cicli while i. Per i = 1, base induttiva, si ha: a)Lunico nodo grigio è s, tutti gli altri sono bianchi. Per ogni v in V - {s}, δ(s, v) > 0 = δ(s, s). b)d[s] = 0 = δ(s, s). c)Q contiene solo s quindi la verifica è immediata.

15 Proprietà Per i > 1 si ha che le preposizioni a), b) e c) verificate per i-1, per ipotesi induttiva. Verifichiamo a) Durante literazione delli-1 ciclo per arrivare allinizio del i-esimo ciclo si ha che: -u i-1 : grigio nero -per ogni v in Adj[u i-1 ] e bianco: bianco grigio Tutte le altre relazioni risultano invariate. Quindi, vanno verificate le condizioni per i nodi che hanno cambiato colore. Per quanato riguarda δ(s, u i-1 ) si ha che per ipotesi induttiva b) è minore a tutti i bianchi, compresi quelli (v in Adj[u i-1 ] e bianchi) diventati grigi dopo literazione i-1.

16 Proprietà Inoltre, poiché u i-1 era allinizio della coda e per ipotesi induttiva c) e a), δ(s, u i-1 ) è minore di tutti i grigi presenti nella coda allinizio delli-1 ciclo. Per quanto riguarda ogni v in Adj[u i-1 ] e bianco, supponiamo per assurdo che esista un bianco w tale che δ(s, w) < δ(s, v). Allora δ(s, w) δ(s, u i-1 ). Nel cammino minimo tra s e w, ci sarà x in Adj[w] tale che δ(s, x) < δ(s, w) δ(s, u i-1 ). x non può essere grigio per ipotesi c) e perché u i-1 era allinizio della coda. Quindi x è nero, ma w bianco è in Adj[x] ed x è nero. Assurdo, sono già stati visitati tutti gli elementi di Adj[x].

17 Proprietà Per i > 1 si ha che le preposizioni a), b) e c) verificate per i-1, per ipotesi induttiva. Verifichiamo b) Durante literazione delli-1 ciclo per arrivare allinizio del i- esimo ciclo si ha che: u i-1 è allinizio della coda e, quindi, d[u i-1 ] = δ(s, u i-1 ). Per ogni v bianco in Adj[u i-1 ], v entra in coda e d[v] = d[u i-1 ] + 1. Se per assurdo d[v] δ(s, v), allora d[v] > δ(s, v) (esiste un cammino meno distante tra s e v, meno lungo di quello che passa per u i-1 ). Inoltre, si avrebbe δ(s, v) δ(s, u i-1 ).

18 Proprietà Nel cammino minimo tra s e v, ci sarà x in Adj[v] tale che δ(s, x) < δ(s, v) δ(s, u i-1 ). x non può essere grigio per ipotesi c) e perché u i-1 era allinizio della coda (infatti, δ(s, x) risulta minore di tutti gli elementi nella coda, grigi). Quindi x è nero, ma v bianco è in Adj[x] ed x è nero. Assurdo, sono già stati visitati tutti gli elementi di Adj[x].

19 Proprietà Per i > 1 si ha che le preposizioni a), b) e c) verificate per i-1, per ipotesi induttiva. Verifichiamo c) Per arrivare allinizio del i-esimo ciclo si ha che: Viene rimosso v 1 dalla testa della coda. Se la coda risulta vuota la dimostrazione è immediata. Altrimenti il nuovo elemento alla testa diventa v 2. Si ha d[v 1 ] d[v 2 ] … d[v r ] e d[v r ] d[v 1 ] +1. Per ogni eventuale elemento aggiunto alla coda si ha d[v r+k ] = d[v 1 ] + 1 d[v 2 ] +1. Quindi, d[v 2 ] … d[v r ] d[v r+k ] e d[v r+k ] d[v 2 ] +1.

20 Albero BFS Proposizione Il vettore p definisce un sottografo di G, Tp=(Vp,Ep), dove: Vp = {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.

21 Albero BFS Dimostrazione Supponiamo Tp non sia un albero. Quindi esisterebbe un ciclo con u 0 = u k e k>1. Per le preposizioni appena dimostrate. Si ha: u 0 = p[u 1 ], u 1 = p[u 2 ], …, u k e d[u 0 ], d[u 1 ] = d[u 0 ]+1, d[u 2 ] = d[u 1 ]+1, …, d[u k ] = d[u k-1 ]+1. Ma allora d[u 0 ] = d[u k ] = d[u 0 ] + k. Assurdo. Inoltre, se p[v] NIL, allora v è entrato in coda ed è raggiungibile da v. Il cammino da s a v determinato dal vettore p è lungo d[v] = δ(s,v).


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

Presentazioni simili


Annunci Google