……………………………………………………………………..
Grafi: ordinamento topologico
“Che cosa” e’ e “come” si calcola
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Che cosa e’
un ordinamento topologico
F. Damiani - Alg. & Lab. 04/05
Una definizione di ordinamento topologico
Definizione. Funzione σ: V → {1, … n} tale che
σ(u)< σ(v) se esiste un cammino da u a v in G
Proprietà. Esiste se e solo se G è aciclico
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Un’altra definizione di ordinamento topologico
(equivalente alla precedente)
Proprietà. Dato un grafo orientato aciclico (“dag”),
è sempre possibile
ordinare i suoi vertici in modo che,
per ogni arco <u, v> del grafo, u preceda v nell’ordinamento.
Definizione. Un ordinamento topologico di un dag è
un ordinamento lineare dei suoi vertici
che soddisfa la condizione precedente,
cioè, per ogni arco <u, v> del grafo, u precede v nell’ordinamento.
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Un algoritmo per il calcolo
di un ordinamento topologico
F. Damiani - Alg. & Lab. 04/05
Un algoritmo per il calcolo di un ordinamento topologico
Tempo di esecuzione: O(n+m)
?
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Un altro algoritmo per il calcolo
di un ordinamento topologico
F. Damiani - Alg. & Lab. 04/05
Esempio (1/2)
Dato il grafo:
C
F
A
E
B
L’ordinamento:
F
C
E
D
D
A
B
È un ordinamento topologico
Infatti disegnando gli archi del grafo essi risultano
tutti orientati nella stessa direzione (da sinistra verso destra):
F
C
E
D
A
B
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Esempio (2/2)
C
F
A
E
D
B
Ma non è l’unico, anche i seguenti sono ordinamenti topologici
A
B
C
F
D
E
C
D
A
F
E
B
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Riprendiamo l’esempio (1/5)
E’ possibile usare una visita del grafo per scoprire un
suo ordinamento topologico?
Visitando il grafo in profondità considerando i vertici in
ordine alfabetico: A B C D E F
Si ottengono i seguenti tempi di inizio e fine visita:
5/10 C
1/4
F 11/12
A
2/3 B
E
6/7
8/9
D
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Riprendiamo l’esempio (2/5)
Riportiamo i tempi sui vertici nel primo ordinamento
preso in esame
F
C
11/12 5/10
E
8/9
D
6/7
A
1/4
B
2/3
Anche per gli altri due ordinamenti si possono trovare degli
ordini, in cui considerare i vertici per effettuare una visita in
profondità, che permettono di “intuire” quale informazione
ottenuta con la visita stessa è utile per scoprire un ordinamento
topologico.
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Riprendiamo l’esempio (3/5)
Per il secondo ordinamento, se visitiamo i vertici nell’ordine:
E D F C A B, si ottiene:
7/8 C
9/12
A
10/11
A
9/12
B
B
10/11
F 5/6
E
3/4
C
7/8
1/2
D
F
5/6
D
3/4
E
1/2
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Riprendiamo l’esempio (4/5)
Ed infine, visitando i vertici nell’ordine B E F A C B,
si ottiene, per il terzo ordinamento:
9/12 C
7/8
A
1/2
C
9/12
B
D
10/11
F 5/6
E
10/11
A
7/8
3/4
D
F
5/6
E
3/4
B
1/2
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Riprendiamo l’esempio (5/5)
Che cosa hanno in comune i tre ordinamenti, rispetto alle
visite?
F
C
11/12 5/10
E
8/9
D
6/7
A
1/4
B
2/3
A
9/12
B
10/11
C
7/8
F
5/6
D
3/4
E
1/2
C
9/12
D
10/11
A
7/8
F
5/6
E
3/4
B
1/2
I vertici sono sempre in
ordine decrescente dei tempi di fine visita
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Un algoritmo per calcolare un ordinamento topologico
Adattiamo la struttura standard dell’algoritmo di visita al
problema dell’ordinamento topologico.
Basta creare una lista dei vertici in ordine decrescente dei tempi
di fine visita.
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Topological_Sort (G, L )
INIZIALIZZA (G)
for ogni u ∈ V do
if color [u] = white
then DFS-topologica (G, u, L )
DFS-topologica (G, u, LISTA)
color [u] ← gray
d[u] ← time ← time + 1
for ogni v ∈ ADJ [u] do
if color [v] = white
then π[v] ← u
DFS-topologica (G, v,
color [u] ← black
f[u] ← time ← time + 1
InserimentoInTesta (u, LISTA)
LISTA )
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Complessità dell’algoritmo per calcolare un ordinamento topologico
Complessità: O(V+E)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Correttezza dell’algoritmo per calcolare un ordinamento topologico
Lemma. Una (qualunque) DFS di un grafo orientato aciclico
associa ai vertici tempi di fine visita tali che:
f[v] < f[u] per ogni arco <u, v> del grafo.
Dimostrazione. Supponiamo per assurdo che per almeno un arco
<u, v> si abbia f[v] > f[u].
1)
d[u]
f[u]
d[v]
f[v]
Impossibile perche’ u non puo’ diventare nero prima che v diventi
grigio, ossia prima che tutti i suoi adiacenti siano stati scoperti.
2)
d[v]
d[u]
f[u]
f[v]
Impossibile perche’ u sarebbe discendente di v in un albero della
foresta e l’arco <u, v> sarebbe un arco all’indietro, ma G e’ un
grafo aciclico.
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
In conclusione
{ G grafo orientato aciclico }
Topological_Sort (G, L)
INIZIALIZZA (G)
for ogni u ∈ V do
if color [u] = white
then DFS-topologica (G, u, L)
{ L contiene i vertici di G in ordine topologico }
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)
Riepilogo
• Due definizioni equivalenti di ordinamento
topologico di un grafo orientato aciclico (il “che
cosa”)
• Due algoritmi specifici (il “come”)
ƒ Un algoritmo “ingenuo”
ƒ Un algoritmo efficiente (basato sulla visita in
profondità)
F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04)