Breath-first search Visita in ampiezza 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
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.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Algoritmi e Strutture Dati
Cammini minimi con una sorgente
RB-alberi (Red-Black trees)
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Strutture dati elementari
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Alberi binari di ricerca
Cammini minimi con sorgente singola
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
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
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
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Capitolo 4 Ordinamento 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 Un albero è un grafo.
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Flusso Massimo Applicazione Algoritmi Esercizio 1 Sia dato la seguente rete di flusso, in cui la sorgente è il nodo 1 e la destinazione è il nodo 6. I.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati 20 aprile 2001
Algoritmi e Strutture Dati
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
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.
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
Algoritmi e Strutture Dati
Componenti fortemente connesse
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
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:
Cammini minimi da un sorgente
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Capitolo 13 Cammini minimi: Ordinamento topologico Algoritmi e Strutture Dati.
Ordinamento topologico
Olimpiadi di Informatica 2010 Giornate preparatorie
Algoritmi elementari su grafi
Ordinamento topologico
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)
Laureando: Enrico Sperindio Relatore: Prof. GIORGIO ROMANIN JACUR
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 in grafi:
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Transcript della presentazione:

Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio Complessità dell’algoritmo Proprietà Albero BFS

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. Nell’albero BFS il cammino da s a v corrisponde ad un “cammino minimo”. L’algoritmo funziona per grafi orientati e non orientati.

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. All’inizio è ∞. p[u]: il predecessore di u nell’albero BFS.

Algoritmo BFS(G,s) for ogni vertice u in V[G] – {s} // inizializzazione di ogni vertice do color[u] ← WHITE d[u] ← ∞ p[u] ← NIL colors[s] ← GRAY // si comincia dal vertice s d[s] ← 0 p[s] ← NIL Q ← {s} // coda dei vertici grigi sulla frontiera All’inizio tutti i vertici sono bianchi e, successivamente, possono diventare grigi e poi neri. La visita in ampiezza costruisce un albero BFS che all’inizio contiene solo la radice: il vertice sorgente s.

Algortimo while Q ≠Ø // termina quando la coda è vuota do u ← head[Q] // prendi prossimo elemento dalla coda for ogni vertice v in Adj[u] // scopri vertici bianchi adiacenti do if color[v] = WHITE then color[v] ← GRAY // diventano grigi d[v] ← d[u] + 1 // la distanza è d[u] +1 p[v] ← u // il predecessore è u ENQUEUE(Q,v) // e vanno in Q DEQUEUE(Q) 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.

Esempio Q = {s} Q = {w, r} ∞ ∞ ∞ 1 ∞ ∞ d[w] = 1 d[r] = 1 d[s] = 0 ∞ ∞ t u Q = {s} r s t u Q = {w, r} ∞ ∞ ∞ 1 ∞ ∞ d[w] = 1 d[r] = 1 d[s] = 0 (a) (b) ∞ ∞ ∞ ∞ ∞ 1 ∞ ∞ v w x y v w x y r s t u Q = {r, t, x} r s t u Q = {t, x, v} 1 2 ∞ 1 2 ∞ d[r] = 1 d[t] = 2 d[x] = 2 d[t] = 2 d[x] = 2 d[v] = 2 (c) (d) ∞ 1 2 ∞ 2 1 2 ∞ v w x y v w x y

Esempio Q = {x, v, u} Q = {v, u, y} 1 2 3 d[x] = 2 d[v] = 2 d[u] = 3 1 r s t u Q = {x, v, u} r s t u Q = {v, u, y} 1 2 3 d[x] = 2 d[v] = 2 d[u] = 3 1 2 3 d[v] = 2 d[u] = 3 d[y] = 3 (d) (e) 2 1 2 ∞ 2 1 2 3 v w x y v w x y r s t u Q = {u, y} r s t u Q = {y} 1 2 3 1 2 3 (f) d[u] = 3 d[y] = 3 (g) d[y] = 3 2 1 2 3 2 1 2 3 v w x y v w x y r s t u Q = Ø 1 2 3 (h) 2 1 2 3 v w x y

Complessità Analisi del tempo di esecuzione su un grafo G=(V,E): Il tempo necessario per l’inizializzazione è 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 l’algoritmo di BFS() viene eseguito in tempo O(|V| + |E|).

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.

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 sull’i-esima iterazione di ENQUEUE(). Per i = 0, δ(s,s) = 0 < ∞. Supponiamo vero per k<i. Se v viene messo in coda, allora si ha che esiste un nodo u in coda tale che v appartiene a Adj[u].

Nodi in coda Si ha che per ipotesi induttiva δ(s,u) = k < ∞ e, inoltre, esiste l’arco (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.

Nodi in coda Esiste un cammino <v0, …, vi-1, vi>, con v0= s e vi = v. Si ha che δ(s, vi-1) = i-1. vi-1 entra in coda per ipotesi induttiva. Quindi quando verrà visitato la lista di adiacenza di vi-1 : v è bianco e verrà messo in coda 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.

Proprietà Proposizione Per ogni i≥1, all’inizio dell’i-esima iterazione del ciclo while si ha: Per ogni vn nero, vg grigio, vb bianco δ(s, vn) ≤ δ(s, vg) ≤ δ(s, vb) Per ogni nodo v nella coda d[v]=δ(s, v) Se la coda Q contiene i vertici {v1, v2,… ,vr} dove v1 è la testa della coda e vr è il fondo. Allora d[vr] ≤ d[v1] + 1 e d[vi] ≤ d[vi+1] per i=1, 2,… ,r-1

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

Proprietà Per i > 1 si ha che le preposizioni a), b) e c) verificate per i-1, per ipotesi induttiva. Verifichiamo a) Durante l’iterazione dell’i-1 ciclo per arrivare all’inizio del i-esimo ciclo si ha che: ui-1: grigio → nero per ogni v in Adj[ui-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, ui-1) si ha che per ipotesi induttiva b) è minore a tutti i bianchi, compresi quelli (v in Adj[ui-1] e bianchi) diventati grigi dopo l’iterazione i-1.

Proprietà Inoltre, poiché ui-1 era all’inizio della coda e per ipotesi induttiva c) e a), δ(s, ui-1) è minore di tutti i grigi presenti nella coda all’inizio dell’i-1 ciclo. Per quanto riguarda ogni v in Adj[ui-1] e bianco, supponiamo per assurdo che esista un bianco w tale che δ(s, w) < δ(s, v). Allora δ(s, w) ≤ δ(s, ui-1). Nel cammino minimo tra s e w, ci sarà x in Adj[w] tale che δ(s, x) < δ(s, w) ≤ δ(s, ui-1). x non può essere grigio per ipotesi c) e perché ui-1 era all’inizio 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].

Proprietà Per i > 1 si ha che le preposizioni a), b) e c) verificate per i-1, per ipotesi induttiva. Verifichiamo b) Durante l’iterazione dell’i-1 ciclo per arrivare all’inizio del i-esimo ciclo si ha che: ui-1 è all’inizio della coda e, quindi, d[ui-1] = δ(s, ui-1). Per ogni v bianco in Adj[ui-1], v entra in coda e d[v] = d[ui-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 ui-1). Inoltre, si avrebbe δ(s, v) ≤ δ(s, ui-1).

Proprietà Nel cammino minimo tra s e v, ci sarà x in Adj[v] tale che δ(s, x) < δ(s, v) ≤ δ(s, ui-1). x non può essere grigio per ipotesi c) e perché ui-1 era all’inizio 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].

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

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.

Albero BFS Dimostrazione Supponiamo Tp non sia un albero. Quindi esisterebbe un ciclo <u0, u1, …, uk> con u0 = uk e k>1. Per le preposizioni appena dimostrate. Si ha: u0= p[u1], u1= p[u2], …, uk e d[u0], d[u1] = d[u0]+1, d[u2] = d[u1]+1, …, d[uk] = d[uk-1]+1. Ma allora d[u0] = d[uk] = d[u0] + 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).