Algoritmi e Strutture Dati Mod B Algoritmi su
Algoritmi e Strutture Dati (Mod. B) Algoritmi su grafi Ricerca in profondità (Depth-First Search) Parte III
Applicazioni di DFS Due problemi: 4 calcolare l’ordinamento topologico indotto da un grafo aciclico. · calcolare le componenti (fortemente) connes- se (CFC) di un grafo (non) orientato. Vedremo che entrambi i problemi possono essere risolti impiegando opportunamente l’algoritmo di DFS
Connettività • Un vertice u si dice connesso ad un vertice v in un grafo G se esiste un percorso da u a v in G. • Un grafo (non) orientato G si dice (fortemente) connesso se ogni coppia di vertici sono connessi. • Altrimenti, G è sconnesso. f b a a e c G d b c e G’ g d
Verifica della connettività
Verifica della connettività
Verifica della connettività Per testare se un grafo non orientato è connesso possiamo: ¶ usare l’algortmo DFS · il grafo è connesso se e solo se una chiamata di DFS raggiungerà tutti i vertici. • In effetti una chiamata di DFS-Visita raggiungerà tutti i vertici contenuti esattamente in una componente connessa. Perché? • Se c’è più di un vertice u con pred[u] = NIL il grafo non può essere connesso.
Componenti connesse • Un sottografo massimale connesso di un grafo non orientato G si dice componente connessa di G. • Un sottografo connesso H di G è “massimale” se • non si possono aggiungere ad H altri vertici o archi • in modo che l’H’ risultante sia ancora un sottografo connesso di G. f b a c f e G b a g d f e c g d H 1 b H 2 g d H 3?
Esercizio Es. 23. 3. 9: Mostrare che DFS su un grafo non orientato G può essere usata per identificare le Componenti Connesse e che la foresta DF contiene tanti alberi quante CC. Modificare DFS in modo che ogni vertice sia etichettato con cc[v] tra 1 e k (k numero di CC) in modo che cc[u]=cc[v] se e solo se u e v se appartengono alla stessa CC.
Componenti fortemente connesse • Un sottografo massimale fortemente connesso di un grafo orientato G si dice componente fortemente connessa (CFC) di G. • Un sottografo fortemente connesso H di G è “massimale” se • non si possono aggiungere ad H altri vertici o archi • in modo che l’H’ risultante sia ancora un sottografo fortemente connesso di G. f b a c f e G a g d b g e c d H 1 H 2 H 3
Proprietà delle CFC Teorema 1: Se due vertici compaiono nella stessa componente fortemente connessa, allora nessun percorso tra i due vertici esce da quella componente. Dimostrazione: Siano u e v due vertici nella stessa componente fortemente connessa. • Esistono percorsi sia da v a u che da u a v. Sia w un vertice lungo qualche percorso u w v. • Poiché c’è un percrorso v u, u è raggiungibile da w tramite w v u. Quindi w e u sono nella stessa componente fortemente connessa. • Poiché w è stato scelto arbitrario, il teorema segue.
Proprietà delle CFC a Componente Fortemente Connessa u v w b
Proprietà delle CFC a Componente Fortemente Connessa u v w b
Proprietà delle CFC Teorema 2: In ogni DFS, tutti i vertici nella stessa componente fortemente connessa compaiono nello stesso albero DF. Dimostrazione: Sia r il primo vertice di una componente fortemente connessa (CFC), visitato da DFS. • Poiché è il primo, tutti gli altri vertici nella CFC devono essere ancora bianchi. Perché? • Esiste quindi un percorso da r a tutti gli altri vertici nella CFC. • Poiché questi percorsi non escono mai dalla CFC di r (teorema precedente), tutti i vertici dei percorsi sono bianchi. • Quindi per il teorema de percorso bianco, ogni vertice nella CFC sarà un discendente di r nell’albero DF.
Proprietà delle CFC a Alcuni alberi DF Componente Fortemente Connessa z b v u u z z b b v
Proprietà delle CFC Definizione: Dato un vertice u di un grafo G, l’avo di u, in simboli (u), è il vertice w raggiungibile da u che viene terminato per ultimo in una DFS del grafo G, cioè: (u)= w tale che e f [w] è massimo • Notate che è possibile che sia (u)= u, perché u è raggiungibile da se stesso e quindi vale anche f [u] f [ (u)] • Inoltre si può dimostrare che ( (u)) = (u)
Proprietà delle CFC Si può dimostrare che ( (u)) = (u) • u v implica che f[ (v)] f[ (u)] • infatti l’insieme {w: v w} {w: u w}, e il tempo di terminazione (f []) dell’avo è il massimo tra tutti i vertici raggiungibili. • ma poichè u (u) allora f[ ( (u))] f[ (u)] • e per quello che abbiamo visto nel lucido precedente vale anche f[ (u)] f[ ( (u))] • quindi risulta che f[ (u)] = f[ ( (u))] • ma allora ( (u)) = (u), perché due vertici con lo stesso tempo di terminazione in DFS non possono che essere lo stesso vertice.
Proprietà delle CFC Teorema 3: In un grafo orientato G, l’avo (u) di un qualsiasi vertice u è un antenato di u nell’albero DF di G. Dimostrazione: Se (u) = u il teorema è banalmente vero. • Se (u) u, poiché u (u), consideriamo i colori dei vertici al tempo d[u]: • se (u) è nero, allora f[ (u) ] < f[u], contraddicendo il fatto che deve essere f[u] f[ (u)], per definizione. • se (u) è grigio, allora (u) è un antenato di u. Dimostriamo ora che (u) non può essere bianco
Proprietà delle CFC Teorema 3: In un grafo orientato G, il avo (u) di un qualsiasi vertice u in un albero DF di G è un antenato di u. Dimostrazione: (u) non può essere bianco Due casi (ricordate che u (u)): ¶ Ogni vertice intermedio tra u e (u) è bianco · Qualche vertice intermedio tra u e (u) non è bianco
Proprietà delle CFC Teorema 3: In un grafo orientato G, il avo (u) di un qualsiasi vertice u in un albero DF di G è un antenato di u. Dimostrazione: (u) non è bianco ¶ Ogni vertice intermedio tra u e (u) è bianco allora (u) sarà un discendente di u per il teorema del percorso bianco. Questo significa però che f [ (u) ]< f [u], il che contraddice la definizione di (u).
Proprietà delle CFC Teorema 3: In un grafo orientato G, il avo (u) di un qualsiasi vertice u in un albero DF di G è un antenato di u. Dimostrazione: (u) non è bianco · Qualche vertice intermedio tra u e (u) non è bianco sia t l’ultimo vertice non bianco nel percorso tra u e (u). Allora t deve essere grigio (non ci sono archi da vertici neri a vertici bianchi) e il successore di t è bianco. Ma allora c’è un percorso bianco tra t e (u), quindi (u) è un discendente di t (teorema del percorso bianco). Quindi f[t]>f [ (u)], contraddicendo la scelta di (u).
Proprietà delle CFC Teorema 4: Durante una DFS di un grafo orientato G, i vertici u e (u), per ogni u, compaiono nella stessa CFC. Dimostrazione: Per definizione di avo, si ha che u (u). Poiché (u) è anche un antenato di u nella foresta DF, abbiamo che (u) u. Possiamo quindi concludere che entrambi i vertici, essendo mutuamente raggiungibili, devono stare nella stessa CFC.
Proprietà delle CFC Teorema 5: In un grafo orientato G, due vertici u e v, compaiono nella stessa CFC se e solo se hanno lo stesso avo nella DFS di G. Dimostrazione: • solo se: Assumiamo u e v siano nella stessa CFC. • Ogni vertice raggiungibile da u è anche raggiungibile da v e vice versa. • Dalla definizione di avo segue che (u)= (v) infatti, u v implica che f[ (u)] f[ (v)] mentre v u implica che f[ (v)] f[ (u)]
Proprietà delle CFC Teorema 5: In un grafo orientato G, due vertici u e v, compaiono nella stessa CFC se e solo se hanno lo stesso avo nella DFS di G. Dimostrazione: • se: Assumiamo (u)= (v). • Per il teorema 4, u compare nella stessa CFC di (u), e v compare nella stessa CFC di (v) • quindi, u e v compaiono nella stessa CFC.
Calcolo delle CFC Sappiamo che: • Le CFC sono insiemi di vertici con lo stesso avo. • Durante DFS, l’avo è sia il primo vertice scoperto (visitato) che l’ultimo vertice terminato (processato) nella sua CFC (teorema del percorso bianco e teorema 5) • L’ultimo vertice terminato è certamente un’avo. Infatti è il suo stesso avo e nessun altro vertice nell’albero ha tempo di terminazione maggiore.
Calcolo delle CFC • L’ultimo vertice terminato r è certamente un’avo. Infatti è il suo stesso avo e nessun altro vertice nell’albero ha tempo di terminazione maggiore. • Quali sono i vertici della CFC di r? • Quelli che hanno la r come avo. cioè quelli che possono raggiungere la r ma che non possono raggiungere alcun altro vertice con tempo di terminazione maggiore della r. • Se r è la il vertice con il massimo valore di f[], allora ci basta cercare i vertici che lo possono raggiungere.
Calcolo delle CFC • Se r è la il vertice con il massimo valore di f[r], allora ci basta cercare i vertici che lo possono raggiungere. • Ma, dalla definizione di grafo trasposto GT di G, questi vertici sono proprio i vertici raggiungibili da r nel grafo trasposto GT. • La stessa cosa può essere ripetuta con tutti i vertici del grafo non raggiunti al passo precedente scegiendo i vertici in ordine decrescente di tempo di terminazione (prima quelli terminati più tardi).
Calcolo delle CFC f e b a g e c f d a b c d G f[e] > f[a] > f[c] > f[f] > f[b] > f[g] > f[d] g
Calcolo delle CFC f e b a c g e c d a GT f[e] > f[a] > f[c] > CFC 1 f[f] > f[b] > f[g] > f[d] f d b g CFC 2 CFC 3
Calcolo delle CFC f e b a g e c f d a b c d g G f[e] > f[a] > f[c] > f[f] > f[b] > f[g] > f[d] Supponiamo di non rispettare l’ordine decrescente e di scegliere il nodo f per primo.
Calcolo delle CFC f f b a a g e c d e GT c d b CFC 1? g CFC 2 Supponiamo di non rispettare l’ordine decrescente e di scegliere il nodo f per primo. Il risultato è scorretto!
Algoritmo per il calcolo delle CFC 1 DFS(G) 2 Calcola il grafo trasposto GT 3 DFS(GT) ma esaminando i vertici in ordine decrescente di tempo f[v] di fine visita 4 fornisci i vertici di ogni albero della foresta DF prodotta al passo 3 come una diversa CFC
- Slides: 31