Sei sulla pagina 1di 40

Algoritmi e Strutture Dati

Capitolo 11
Grafi e visite di grafi

Algoritmi e strutture dati Giuseppe F. Italiano

2
Da Demetrescu et al. McGraw Hill 2004

1

Algoritmi e strutture dati Giuseppe F. Italiano

3
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

4
Da Demetrescu et al. McGraw Hill 2004

2

Algoritmi e strutture dati Giuseppe F. Italiano

5
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

6
Da Demetrescu et al. McGraw Hill 2004

3

Algoritmi e strutture dati Giuseppe F. Italiano

7
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Part of the interrelation map of characters of



The Count of Monte8
Cristo.

Da Demetrescu et al. McGraw
Hill 2004

4

Algoritmi e strutture dati Giuseppe F. Italiano

Da Demetrescu et al. McGraw 9



Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Definizione
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}
Esempio 2: V = {persone che vivono in Italia},
E = { (x,y) tale che x ha inviato una mail a y}
10
Da Demetrescu et al. McGraw Hill 2004

5

Algoritmi e strutture dati Giuseppe F. Italiano

Terminologia (1/2)
Esempio 1: relazione simmetrica grafo non orientato
Esempio 2: relazione non simmetrica grafo orientato

n = numero di vertici
m = numero di archi

L ed I sono adiacenti (v) = 2m


vV
(L,I) incidente a L
I ha grado 4: (I) = 4

11
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Terminologia (2/2)

< L , I , E, C, B, A > un cammino


nel grafo di lunghezza 5
Non il pi corto cammino tra L ed A

La lunghezza del pi corto cammino


tra due vertici si dice distanza: L ed A
hanno distanza 4

12
Da Demetrescu et al. McGraw Hill 2004

6

Algoritmi e strutture dati Giuseppe F. Italiano

Strutture dati
per rappresentare grafi

13
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Grafi non orientati

14
Da Demetrescu et al. McGraw Hill 2004

7

Algoritmi e strutture dati Giuseppe F. Italiano

Grafi orientati

15
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Prestazioni della lista di archi

16
Da Demetrescu et al. McGraw Hill 2004

8

Algoritmi e strutture dati Giuseppe F. Italiano

Prestazioni delle liste di adiacenza

17
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Prestazioni della matrice di adiacenza

18
Da Demetrescu et al. McGraw Hill 2004

9

Algoritmi e strutture dati Giuseppe F. Italiano

Visite di grafi

19
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Scopo e tipi di visita


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)

20
Da Demetrescu et al. McGraw Hill 2004

10

Algoritmi e strutture dati Giuseppe F. Italiano

Visite di alberi

Algoritmi che consentono laccesso


sistematico ai nodi e agli archi di un albero

Gli algoritmi di visita si distinguono in


base al particolare ordine di accesso ai nodi

21
Copyright 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo di visita generica


visitaGenerica visita il nodo r e
tutti i suoi discendenti in un albero

Richiede tempo O(n) per visitare un


albero con n nodi a partire dalla radice
22
Copyright 2004 - The McGraw - Hill Companies, srl

11

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo di visita in ampiezza (BFS)


Lalgoritmo di visita in ampiezza (BFS)
parte dalla radice r e procede visitando i
nodi per livelli successivi.
Un nodo sul livello i pu essere visitato solo
se sono stati gi visitati tutti i nodi sul
livello (i-1).

Come mantenere S?

23
Copyright 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in ampiezza di un albero


12

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo di visita in ampiezza (BFS)


Versione iterativa (per alberi binari):

25
Copyright 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo di visita in profondit (DFS)


Lalgoritmo di visita in profondit (DFS) parte
dalla radice r e procede visitando nodi di figlio
in figlio fino a raggiungere una foglia.
Retrocede poi al primo antenato che ha ancora
figli non visitati (se esiste) e ripete il
procedimento a partire da uno di quei figli.

Come mantenere S?

26
Copyright 2004 - The McGraw - Hill Companies, srl

13

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in profondit di un albero



[versione iterativa basata su pila]

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo di visita in profondit (DFS)


Versione iterativa (per alberi binari):

28
Copyright 2004 - The McGraw - Hill Companies, srl

14

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo di visita in profondit (DFS)

Versione ricorsiva (per alberi binari):

29
Copyright 2004 - The McGraw - Hill Companies, srl

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in profondit di un albero



[versione ricorsiva]

15

Algoritmi e strutture dati Giuseppe F. Italiano

Osservazioni
Ad ogni istante, la visita (DFS, BFS) partiziona i
nodi dellalbero in tre classi:
nodo chiuso: tutti gli archi incidenti sul nodo sono
stati esaminati
nodo aperto: esistono archi incidenti sul nodo non
ancora esaminati
nodo non ancora visitato
Il tipo di visita (DFS, BFS) determinato
dallordine (i.e., struttura dati) con cui vengono
visitati i nodi aperti: DFS = pila, BFS = coda.
31
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Grafi: algoritmo di visita generica

32
Da Demetrescu et al. McGraw Hill 2004

16

Algoritmi e strutture dati Giuseppe F. Italiano

Osservazioni
Un vertice viene marcato quando viene incontrato
per la prima volta: marcatura implementata tramite
un vettore di bit di marcatura
Visita genera un albero di copertura T del grafo
Insieme di vertici F T mantiene la frangia di T:
v (T-F) : v chiuso, tutti gli archi incidenti su v sono
stati esaminati
v F : v aperto, esistono archi incidenti su v non
ancora esaminati

33
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Costo della visita

Tempo di esecuzione dipende da struttura dati


usata per rappresentare il grafo:
Lista di archi: O(m n)
Liste di adiacenza: O(m + n)
Matrice di adiacenza: O(n2)

34
Da Demetrescu et al. McGraw Hill 2004

17

Algoritmi e strutture dati Giuseppe F. Italiano

Casi particolari di visite

Se frangia F implementata come coda si ha


visita in ampiezza (BFS)
Se frangia F implementata come pila si ha
visita in profondit (DFS)

35
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in ampiezza

36
Da Demetrescu et al. McGraw Hill 2004

18

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in ampiezza

37
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo non orientato (1/2)

38
Da Demetrescu et al. McGraw Hill 2004

19

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo non orientato (2/2)

39
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo orientato

40
Da Demetrescu et al. McGraw Hill 2004

20

Algoritmi e strutture dati Giuseppe F. Italiano

Propriet

Per ogni nodo v, il livello di v nellalbero BFS


pari alla distanza di v dalla sorgente s
Per ogni arco (u,v) di un grafo non orientato,
gli estremi u e v appartengono allo stesso
livello o a livelli consecutivi dellalbero BFS
Se il grafo orientato, possono esistere archi
(u,v) che attraversano allindietro pi di un
livello

41
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in profondit

42
Da Demetrescu et al. McGraw Hill 2004

21

Algoritmi e strutture dati Giuseppe F. Italiano

Visita in profondit

43
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo non orientato (1/2)

44
Da Demetrescu et al. McGraw Hill 2004

22

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo non orientato (2/2)

45
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo orientato (1/2)

46
Da Demetrescu et al. McGraw Hill 2004

23

Algoritmi e strutture dati Giuseppe F. Italiano

Esempio: grafo orientato (2/2)

47
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Propriet
Sia (u,v) un arco di un grafo non orientato. Allora:
(u,v) un arco dellalbero DFS, oppure
i nodi u e v sono luno discendente/antenato dellaltro
Sia (u,v) un arco di un grafo orientato. Allora:
(u,v) un arco dellalbero DFS, oppure
i nodi u e v sono luno discendente/antenato dellaltro,
oppure
(u,v) un arco trasversale a sinistra, ovvero il vertice
v in un sottoalbero visitato precedentemente ad u

48
Da Demetrescu et al. McGraw Hill 2004

24

Algoritmi e strutture dati Giuseppe F. Italiano

Componenti Fortemente Connesse


In grafi non orientati due vertici u e v sono connessi se c un
cammino che connette u e v
Come definire connettivit su grafi orientati?
Vertice x fortemente connesso a y se esistono due cammini:
Da x a y
Da y a x
(consentiamo a cammini di condividere archi e vertici)
x y : x fortemente connesso a y
(consentiamo anche cammini di un vertice e nessun arco)
x x
49
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Relazione di equivalenza
Riflessiva:
per ogni v, v v (cammini degeneri da v a v)
Simmetrica:
se u v, allora v u (usa gli stessi due cammini)
Transitiva:
Se u vev w, allora u w
(quattro cammini: u v, v u, v w, w v.
concatenandoli a coppie: u v w, w v u)

N.B. Importante che cammini condividono archi e vertici


50
Da Demetrescu et al. McGraw Hill 2004

25

Algoritmi e strutture dati Giuseppe F. Italiano

Componenti fortemente connesse

Le classi di equivalenza della relazione di


connettivit forte
[v] = { u | u v}
sono le componenti fortemente connesse
(partizionano tutti i vertici in sottoinsiemi disgiunti)

51
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Componenti fortemente connesse

Se riusciamo a trovare tutte le componenti


fortemente connesse di un grafo facile dire se
due vertici sono fortemente connessi:
verifica semplicemente che siano nella stessa
componente fortemente connessa

52
Da Demetrescu et al. McGraw Hill 2004

26

Algoritmi e strutture dati Giuseppe F. Italiano

Componenti fortemente connesse (CFC)


Trovare singola componente fortemente
connessa [x] facile:
1. Trova S, tutti i vertici raggiungibili da x
(con DFS, BFS, )
2. Trova T, tutti i vertici che raggiungono x
(nel grafo inverso)
3. Restituisci [x] = S T
Tempo di esecuzione: O(m + n)

53
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Componenti fortemente connesse (CFC)


Dato un vertice x, possiamo trovare la
componente fortemente connessa [x] in tempo
O(m+n)
In quanto tempo riusciamo a trovare tutte le
componenti fortemente connesse?
O(m n)? (Per ogni x, trova la componente
fortemente connessa [x])
Riusciamo a fare di meglio?
54
Da Demetrescu et al. McGraw Hill 2004

27

Algoritmi e strutture dati Giuseppe F. Italiano

Relazione cruciale tra CFC e DFS


Vogliamo dimostrare la seguente propriet:
Le componenti fortemente connesse sono
sottoalberi di un albero DFS
Lemma. Se abbiamo due cammini a b, b a,
tutti i vertici intermedi in questi cammini devono
essere nella stessa CFC di a e b.
Dim. Sia c un vertice intermedio: a c b
Possiamo ottenere un cammino c a
concatenando c b e b a
55
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Relazione cruciale tra CFC e DFS


Teorema. CFC sono sottoalberi di albero DFS
Dim. Supponiamo di no: esiste una CFC in due parti
diverse (T e T) dellalbero DFS.
Per definizione di CFC, devono esserci cammini tra T e
T (nelle due direzioni).
Per lemma precedente, questi cammini devono essere archi.
DFS non ha archi trasversali a destra, quindi unica
possibilit che x in T sia antenato di y in T
Sempre per lemma precedente, tutti i nodi dellalbero tra x e
y sono nella stessa CFC.
In contraddizione con ipotesi iniziale.
56
Da Demetrescu et al. McGraw Hill 2004

28

Algoritmi e strutture dati Giuseppe F. Italiano

Relazione cruciale tra CFC e DFS


Teorema. CFC sono sottoalberi di albero DFS
Facciamoci guidare da visita DFS:
1. Trovare albero DFS contenente tutte le CFC
2. Partizionare albero DFS tagliandolo in punti
opportuni, cos da lasciarne solo i sottoalberi
corrispondenti alle CFC

57
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Relazione cruciale tra CFC e DFS

58
Da Demetrescu et al. McGraw Hill 2004

29

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 1:
Trovare albero DFS contenente tutte le CFC
Per visitare tutte le CFC di un grafo G, basta:
aggiungere a G un vertice speciale , e archi
(,v) da a tutti i vertici v di G.
visita DFS a partire da in grado di raggiungere
tutti i vertici e quindi tutte le CFC di G.
Grafo risultante ha (n+1) vertici e (m+n) archi.
Non alteriamo CFC: aggiungiamo solo [] = {}
59
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 2: Partizionare albero DFS nelle CFC
Vertice v la testa della sua CFC [v] se il vertice
di [v] pi in alto nellalbero DFS
Per partizionare albero DFS nelle CFC basta:
procedere dal basso verso lalto
identificare la testa v di una CFC
rimuovere arco DFS entrante in v
(staccare unintera CFC dal grafo)

60
Da Demetrescu et al. McGraw Hill 2004

30

Algoritmi e strutture dati Giuseppe F. Italiano

Relazione cruciale tra CFC e DFS

61
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 2: Partizionare albero DFS nelle CFC
= Identificare la testa per ogni CFC
Vertice v la testa della sua CFC [v] se non ci
sono archi che conducono fuori dal sottoalbero
DFS di radice v
= Identificare archi che fanno uscire da sottoalbero
Nota: Soltanto archi allindietro e archi trasversali
a sinistra possono far uscire da sottoalbero DFS

62
Da Demetrescu et al. McGraw Hill 2004

31

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 2: Partizionare albero DFS nelle CFC
= Identificare la testa per ogni CFC
= Identificare archi che fanno uscire da sottoalbero
Propriet 1: Se non ci sono archi (allindietro o
trasversali) che fanno uscire dal sottoalbero di v,
allora v la testa di CFC [v]

63
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 2: Partizionare albero DFS nelle CFC
= Identificare la testa per ogni CFC
= Identificare archi che fanno uscire da sottoalbero
Propriet 2: Se c un arco allindietro (u,w) dal
sottoalbero di v, allora v NON pu essere la testa
di CFC [v]. Perch?
(i) w, v e u nello stesso ciclo e quindi stessa CFC
(ii) w antenato di v nellalbero DFS

64
Da Demetrescu et al. McGraw Hill 2004

32

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 2: Partizionare albero DFS nelle CFC
= Identificare la testa per ogni CFC
= Identificare archi che fanno uscire da sottoalbero
Archi trasversali a sinistra possono complicare le
cose.
Perch?

65
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

arco (d,j) fa
uscire da
sottoalbero di
radice d, e d
testa di [d]
arco (a,e) fa
uscire da
sottoalbero di
radice a, e a non
testa di [a]
(anche se non ci fossero gli archi (a,g) e (a,b)!)
(a,e) chiude un ciclo e (d,j) non chiude nessun ciclo!
66
Da Demetrescu et al. McGraw Hill 2004

33

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC


Problema 2: Partizionare albero DFS nelle CFC
= Identificare la testa per ogni CFC
= Identificare archi che fanno uscire da sottoalbero
Archi trasversali possono complicare le cose.
In particolare, archi trasversali tra diverse CFC
possono essere trascurati (non chiudono cicli).
Non appena DFS finisce di visitare un vertice v, se
v la testa della sua CFC [v], allora cancelliamo
tutta la CFC [v] dal grafo (con archi incidenti).
67
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC v.1


Problema 2: Partizionare albero DFS nelle CFC
Per partizionare albero DFS nelle CFC:
procedi dal basso verso lalto (mentre risali da
DFS)
non appena DFS finisce di visitare un vertice v,
se v la testa di [v], cancella tutta [v] (con suoi
archi incidenti).
Rimane da specificare come identificare la testa v
di una CFC
68
Da Demetrescu et al. McGraw Hill 2004

34

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo cancella CFC non appena la scopre.


Lemma. Se arco trasversale fa uscire da
sottoalbero di v, allora v non la testa di [v]
Dim. Sia (u,w) un tale arco trasversale
Sia z testa di [w]: z deve essere antenato di v
(altrimenti [w] sarebbe gi stata cancellata)
w z (z testa di [w], e quindi z in [w])
z v (z antenato di v)
v u (u sottoalbero di v)
(u,w) implica z in [v], e quindi v non testa di [v]
69
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC v.2


Problema 2: Partizionare albero DFS nelle CFC
Non appena DFS finisce di visitare un vertice v
(risalendo dal basso verso lalto), verifica se v
la testa di [v]:
controlla se esistono archi trasversali o all
indietro che fanno uscire da sottoalbero di v
Se v la testa, cancella tutta [v] (con suoi archi
incidenti).

70
Da Demetrescu et al. McGraw Hill 2004

35

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC

Due task da eseguire efficientemente:


Come distinguere archi all'indietro e
trasversali da archi in avanti?
Come controllare, per ogni vertice v, se
esistono archi trasversali o allindietro che
fanno uscire da sottoalbero di v?
(serve per verificare se v la testa di [v])

71
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC

DFS(v): numero di
vertici incontrati
prima di v nella
visita DFS.
Facile da calcolare
incrementando un
contatore durante
visita DFS

72
Da Demetrescu et al. McGraw Hill 2004

36

Algoritmi e strutture dati Giuseppe F. Italiano

Arco (u,v) all Algoritmo per CFC


indietro o
trasversale se e
solo se
DFS(v) < DFS(u)
v testa di [v]
se e solo se in
sottoalbero di v
non c arco (u,w):
DFS(w) < DFS(v)

73
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC v.3


Problema 2: Partizionare albero DFS nelle CFC
Nella visita DFS, assegna i numeri DFS().
Non appena DFS finisce di visitare un vertice v
(risalendo dal basso verso lalto), verifica se v
la testa di [v]:
controlla che nel sottoalbero di v non esistano
archi (u,w) tali che DFS(w) < DFS(v)
Se v la testa, cancella tutta [v] (con suoi archi
incidenti).
74
Da Demetrescu et al. McGraw Hill 2004

37

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC

Definiamo fuga(v) come il pi piccolo numero


DFS() di un nodo raggiungibile con un arco
uscente dal sottoalbero di radice v
Se non esiste un tale arco, allora per
convenzione fuga(v) = DFS(v).

v la testa di [v] se e solo se fuga(v) = DFS(v)

75
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Algoritmo per CFC v.4


Problema 2: Partizionare albero DFS nelle CFC
Nella visita DFS, assegna i numeri DFS().
Non appena DFS finisce di visitare un vertice v
(risalendo dal basso verso lalto):
calcola fuga(v) e controlla se v la testa di [v]
(verificando se fuga(v) = DFS(v))
Se v la testa di [v], cancella tutta [v] (con suoi
archi incidenti).

76
Da Demetrescu et al. McGraw Hill 2004

38

Algoritmi e strutture dati Giuseppe F. Italiano

Calcolo di fuga(v)
Allinizio, fuga(v) = DFS(v)
Per ogni arco (v,w) dellalbero DFS:
fuga(v) = min { fuga(v), fuga(w) }
Per ogni altro arco (v,w):
fuga(v) = min { fuga(v), DFS(w) }

Per ogni nodo v, fuga(v) pu essere calcolato


risalendo dal basso verso lalto nella visita DFS

77
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

78
Da Demetrescu et al. McGraw Hill 2004

39

Algoritmi e strutture dati Giuseppe F. Italiano

Componenti fortemente connesse

Le componenti fortemente connesse di un


grafo orientato possono essere calcolate in
tempo O(m+n) con opportune modifiche
dellalgoritmo di visita DFS
(calcolando DFS(), fuga(), mantenendo pila)

79
Da Demetrescu et al. McGraw Hill 2004

Algoritmi e strutture dati Giuseppe F. Italiano

Riepilogo
Nozione di grafo e terminologia
Diverse strutture dati per rappresentare grafi nella
memoria di un calcolatore
Lutilizzo di particolare rappresentazione pu
avere impatto notevole su tempi di esecuzione di
algoritmi su grafi (i.e., nella visita di un grafo)
Algoritmo di visita generica e due casi particolari:
visita in ampiezza e visita in profondit (DFS)
Propriet visita DFS ci hanno guidato nel progetto
di algoritmi efficienti (calcolo CFC)
80
Da Demetrescu et al. McGraw Hill 2004

40