Gli algoritmi di visita dei grafi

Transcript

Gli algoritmi di visita dei grafi
APA I e II
21 Gli algoritmi di visita dei grafi
Gli algoritmi di visita dei grafi
Gianpiero Cabodi e Paolo Camurati
Dip. Automatica e Informatica
Politecnico di Torino
Algoritmi di visita
Visita di un grafo G=(V, E):
„ a partire da un vertice dato, seguendo gli
archi con una certa strategia, elencare i
vertici
incontrati,
eventualmente
aggiungendo altre informazioni.
Algoritmi:
„ in profondità (depth-first search, DFS)
„ in ampiezza (breadth-first search, BFS).
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
2
1
APA I e II
21 Gli algoritmi di visita dei grafi
Visita in profondità
A partire da un vertice s:
„ visita tutti i vertici del grafo (raggiungibili da s e
non)
„ etichetta ogni vertice v con tempo di scoperta/
tempo di fine elaborazione pre[v]/post[v]
„ etichetta ogni arco:
z grafi
orientati:
T(ree),
B(ackward),
F(orward), C(ross)
z grafi non orientati: T(ree), B(ackward)
„ genera una foresta di alberi della visita in
profondità.
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
3
Principi base
Profondità: espande l’ultimo vertice scoperto
che ha ancora vertici non ancora scoperti
adiacenti.
Scoperta di un vertice: prima volta che si
incontra nella visita (discesa ricorsiva).
Completamento: fine dell’elaborazione del
vertice (uscita dalla ricorsione).
Scoperta/Completamento: tempo discreto
che avanza mediante contatore time.
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
4
2
APA I e II
21 Gli algoritmi di visita dei grafi
I vertici si distinguono (concettualmente) in:
„ bianchi: non ancora scoperti
„ grigi: scoperti, ma non completati
„ neri: scoperti e completati.
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
5
Classificazione degli archi
Grafo orientato:
„ T: archi dell'albero della visita in profondità
„ B: connettono un vertice u ad un suo
antenato v nell’albero: pre(v)<pre(u) e
post(v)>post(u)
„ F: connettono un vertice u ad un suo
discendente v nell’albero: pre(v)>pre(u) e
post(v)<post(u)
„ C: archi rimanenti.
Grafo non orientato: solo archi T e B.
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
6
3
APA I e II
21 Gli algoritmi di visita dei grafi
Strutture dati
grafo come lista delle adiacenze
„ vettore pre dei tempi di scoperta
„ vettore post dei tempi di completamento
„ possibilità di gestire il vettore π dei
predecessori per la costruzione della
foresta degli alberi di visita in profondità
„ etichette degli archi T, B, F, C.
„
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
7
Algoritmo
static int time, pre[maxV], post[maxV];
void GRAPHsearch(Graph G)
{ int v;
time = 0;
for (v=0; v < G->V; v++)
{
pre[v] = -1;
post[v] = -1;
}
for (v=0; v < G->V; v++)
if (pre[v]== -1)
dfsR(G, EDGE(v,v));
}
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
8
4
APA I e II
21 Gli algoritmi di visita dei grafi
dfsR con lista adiacenze
void dfsR(Graph G, Edge e)
{ link t; int i, v, w = e.w; Edge x;
show("tree" , e) ;
pre[w] = time++;
for (t = G->adj[w]; t != NULL; t = t->next)
if (pre[t->v] == -1)
dfsR(G, EDGE(w, t->v));
else
{ v = t->v; x = EDGE(w, v);
if (post[v] == -1) show("back", x);
else if(pre[v]>pre[w]) show("down", x)
else show("cross", x) ;
}
post[w] = time++;
}
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
9
Esempio
time = -1
r
s
t
v
w
x
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
π
10
5
APA I e II
21 Gli algoritmi di visita dei grafi
π
time = 0
r
r
s
t
w
x
0/
v
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
11
π
time = 1
r
s
r
s
0/
1/
v
w
A.A. 2004/2005
t
x
21 Gli algoritmi di visita dei grafi
12
6
APA I e II
21 Gli algoritmi di visita dei grafi
π
time = 2
r
s
r
s
0/
1/
t
w
2/
v
w
A.A. 2004/2005
x
21 Gli algoritmi di visita dei grafi
13
π
time = 3
r
s
r
s
0/
1/
t
w
2/3
v
A.A. 2004/2005
w
x
21 Gli algoritmi di visita dei grafi
14
7
APA I e II
21 Gli algoritmi di visita dei grafi
π
time = 4
r
s
r
0/
s
t
w
1/4
2/3
v
w
A.A. 2004/2005
x
21 Gli algoritmi di visita dei grafi
15
π
time = 5
r
s
r
s
0/
1/4
5/
2/3
v
w
A.A. 2004/2005
t
v
w
x
21 Gli algoritmi di visita dei grafi
16
8
APA I e II
21 Gli algoritmi di visita dei grafi
π
time = 6
r
s
r
s
0/
1/4
5/6
2/3
v
w
A.A. 2004/2005
t
v
w
x
21 Gli algoritmi di visita dei grafi
17
π
time = 7
r
s
r
s
0/7
1/4
5/6
2/3
v
w
A.A. 2004/2005
t
v
w
x
21 Gli algoritmi di visita dei grafi
18
9
APA I e II
21 Gli algoritmi di visita dei grafi
π
time = 8
r
s
r
s
0/7
1/4
5/6
2/3
v
w
A.A. 2004/2005
t
t
v
w
8/
x
21 Gli algoritmi di visita dei grafi
19
π
time = 9
r
s
r
s
0/7
1/4
8/
5/6
2/3
9/
v
w
A.A. 2004/2005
t
t
v
x
w
x
21 Gli algoritmi di visita dei grafi
20
10
APA I e II
21 Gli algoritmi di visita dei grafi
π
time = 10
r
s
r
s
0/7
1/4
8/
5/6
2/3
9/10
v
w
x
A.A. 2004/2005
t
t
v
w
21 Gli algoritmi di visita dei grafi
21
π
time = 11
r
s
r
s
t
0/7
1/4
8/11
5/6
2/3
9/10
v
w
x
A.A. 2004/2005
x
t
v
x
w
21 Gli algoritmi di visita dei grafi
22
11
APA I e II
21 Gli algoritmi di visita dei grafi
Complessità (lista adiacenze)
Θ(|V|)
Θ(|E|)
Inizializzazione
„ visita ricorsiva da u
„ T(n) = Θ(|V|+|E|).
„ Con la matrice delle adiacenze: T(n) =
Θ(|V|2).
„
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
23
Esempio
b
a
s
c
d
f
e
b
g
T
2/5
3/4
c
T
C
6/7
s
T
1/8
B
T
A.A. 2004/2005
a
F
C
d
21 Gli algoritmi di visita dei grafi
0/9
e
10/15
T
C
T
B
11/12
f
C
13/14
g
24
12
APA I e II
21 Gli algoritmi di visita dei grafi
s
e
a
T
F
f
B
T
C
g
C
T
B
d
b
T
T
C
T
C
c
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
25
Visita in ampiezza
A partire da un vertice s:
„ determina tutti i vertici raggiungibili da s
„ calcola la distanza minima da s di tutti i
vertici da esso raggiungibili.
„ genera un albero della visita in ampiezza.
Ampiezza: espande tutta la frontiera tra
vertici già scoperti/non ancora scoperti.
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
26
13
APA I e II
21 Gli algoritmi di visita dei grafi
Principi base
Scoperta di un vertice: prima volta che si
incontra nella visita.
Vertici:
„ bianchi: non ancora scoperti
„ grigi: scoperti, ma non completati
„ neri: scoperti e completati.
Dato vertice u:
„ pre[u] = distanza di u da s
„ st[u]: padre di u nell’albero della visita.
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
27
Strutture dati
grafo come matrice delle adiacenze
„ coda Q dei vertici grigi
„ vettore st dei predecessori
„ vettore pre delle distanze minime.
„
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
28
14
APA I e II
21 Gli algoritmi di visita dei grafi
Algoritmo (matrice delle adiacenze)
}
void bfs(Graph G, Edge e)
{ int v, w; int flag=0;
QUEUEput(e);
while (!QUEUEempty())
if (pre[(e = QUEUEget()).w] == -1)
{
pre[e.w] = flag ? pre[e.v]+1:0;
flag=1;
st[e.w] = e.v;
for (v = 0; v < G->V; v++)
if (G->adj[e.w][v] == 1)
if (pre[v] == -1)
21
Gli algoritmi di visita dei grafi
QUEUEput(EDGE(e.w,
v));
A.A. 2004/2005
29
Esempio
st
Q
r
s
t
u
v
w
x
y
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
30
15
APA I e II
21 Gli algoritmi di visita dei grafi
Q
st
s
r
s
t
u
∞
0
∞
∞
∞
∞
∞
∞
v
w
x
y
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
Q
r
31
st
w
r
A.A. 2004/2005
s
r
s
t
u
1
0
∞
∞
∞
1
∞
∞
v
w
x
y
21 Gli algoritmi di visita dei grafi
s
w
32
16
APA I e II
21 Gli algoritmi di visita dei grafi
Q
w
st
v
s
r
r
s
t
u
1
0
∞
∞
2
1
∞
∞
v
w
x
y
A.A. 2004/2005
w
v
21 Gli algoritmi di visita dei grafi
Q
v
t
33
st
x
s
r
A.A. 2004/2005
r
s
t
u
1
0
2
∞
2
1
2
∞
v
w
x
y
21 Gli algoritmi di visita dei grafi
v
w
t
x
34
17
APA I e II
21 Gli algoritmi di visita dei grafi
t
Q
st
x
s
r
r
s
t
u
1
0
2
∞
2
1
2
∞
w
x
y
A.A. 2004/2005
v
w
t
21 Gli algoritmi di visita dei grafi
x
Q
35
st s
u
r
r
s
t
1
0
2
3
2
1
2
∞
w
x
y
A.A. 2004/2005
x
u
21 Gli algoritmi di visita dei grafi
v
w
t
x
u
36
18
APA I e II
21 Gli algoritmi di visita dei grafi
u
Q
st s
y
r
r
s
t
1
0
2
3
2
1
2
3
w
x
y
A.A. 2004/2005
u
v
w
t
u
y
21 Gli algoritmi di visita dei grafi
37
st s
y
Q
r
r
s
t
1
0
2
3
2
1
2
3
w
x
y
A.A. 2004/2005
x
u
21 Gli algoritmi di visita dei grafi
v
w
t
u
x
y
38
19
APA I e II
21 Gli algoritmi di visita dei grafi
st s
Q
r
r
s
t
1
0
2
3
2
1
2
3
w
x
y
A.A. 2004/2005
u
v
w
t
u
x
y
21 Gli algoritmi di visita dei grafi
39
Complessità
Operazioni sulla coda
„ Scansione della matrice delle adiacenze
T(n) = Θ(|V|2).
„ Con la lista delle adiacenze: T(n) =
O(|V|+|E|).
„
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
40
20
APA I e II
21 Gli algoritmi di visita dei grafi
Proprietà
Cammini minimi: la visita in ampiezza
determina la minima distanza tra s e ogni
vertice raggiungibile da esso.
st s
Cammino minimo da s a u:
s, w, t, u
lunghezza = 3
r
v
w
t
u
A.A. 2004/2005
21 Gli algoritmi di visita dei grafi
x
y
41
21