elementare se e
i
= e
j
i = j
semplice se non visita mai due volte lo
stesso vertice (eccetto v
1
= v
k+1
).
Un grafo si dice connesso se per ogni coppia di vertici esiste almeno
un cammino che li collega.
Figura 4: Grafo connesso.
v
1
v
2
v
4
v
3
Un grafo G
= (V
, E
E.
Se G
= (V, E
(V, E
eE
c
e
x
e
eE
x
e
= n 1
eE(S)
x
e
|S| 1 S V : S =
x
e
0 intero, e E
Osservazione:
il problema ammette soluzione se e solo se G `e connesso.
9
Ricerca Operativa Teoria dei gra
ALGORITMO DI KRUSKAL (1956)
Algoritmo di tipo greedy (le scelte sono basate su un criterio locale
e non sono riconsiderate successivamente)
begin E
:=
ordina E per costi non decrescenti;
repeat
individua il lato (e
j
) di costo minimo; E := E\{e
j
};
if E
{e
j
} non ha circuiti then E
{e
j
};
until |E
| = n 1;
end
complessit`a: O(m log m)
10
Ricerca Operativa Teoria dei gra
Esempio Algoritmo di Kruskal
Determinare lalbero a costo minimo del grafo rappresentato in
gura.
v
1
v
4
v
3
v
2
v
5
3
5
10
13
9
1 1
7
13 (v
2
,v
4
)
10 (v
1
,v
4
)
9 (v
3
,v
4
)
7 (v
2
,v
5
)
5 (v
1
,v
3
)
3 (v
1
,v
2
)
1 (v
4
,v
5
)
1 (v
3
,v
5
)
c(e
j
) e
j
13 (v
2
,v
4
)
10 (v
1
,v
4
)
9 (v
3
,v
4
)
7 (v
2
,v
5
)
5 (v
1
,v
3
)
3 (v
1
,v
2
)
1 (v
4
,v
5
)
1 (v
3
,v
5
)
c(e
j
) e
j
11
Ricerca Operativa Teoria dei gra
PROBLEMI DI CAMMINO MINIMO
Alcune Varianti:
1. trovare un cammino minimo da un nodo origine s ad un nodo
terminale t;
2. assegnato un nodo iniziale s, trovare i cammini pi` u brevi da s
a ciascuno degli altri nodi;
3. trovare i cammini minimi tra tutte le coppie di nodi.
Analizziamo il primo problema. In particolare consideriamo il pro-
blema di individuare un cammino semplice fra due vertici assegnati
s e t di un grafo orientato G = (V, A) con costi c
ij
0 per ogni
arco (i, j) A.
Rappresentazione del problema:
G = (V, A) grafo orientato;
Formulazione: caso particolare (c
ij
0, i, j)
min
(i,j)A
c
ij
x
ij
j:(s,j)A
x
sj
j:(j,s)A
x
js
= 1
j:(t,j)A
x
tj
j:(j,t)A
x
jt
= 1
j:(k,j)A
x
kj
j:(j,k)A
x
jk
= 0 k V \ {s, t}
0 x
ij
1 (i, j) A
12
Ricerca Operativa Teoria dei gra
Esempio
Sia dato il seguente grafo orientato formulare un modello che per-
metta di determinare il cammino semplice dal nodo 1 al nodo 7
avente costo minimo.
1 4
2
5
5
6
12
12
10
6
7
6
7
3
3
4
15
min 6x
12
+ 5x
14
+ 10x
15
+ 6x
23
+
+2x
24
+ 12x
26
+ 4x
37
+ 7x
43
+ 12x
54
+ 15x
67
+ 3x
63
x
12
+ x
14
+ x
15
= 1
(x
37
+ x
67
) = 1
x
23
+ x
24
+ x
26
x
12
= 0
x
37
(x
23
+ x
43
+ x
63
) = 0
x
43
(x
14
+ x
24
+ x
54
) = 0
x
54
x
15
= 0
x
67
+ x
63
x
26
= 0
0 x
ij
1 i, j
Si osservi che non `e necessario porre x
ij
{0, 1} i, j poiche la
matrice dei vincoli `e TUM.
13
Ricerca Operativa Teoria dei gra
Algoritmo di Dijkstra
INPUT: grafo G = (V, A) orientato con c
ij
0 (i, j) A;
nodi s e t;
OUTPUT: cammino da s a t a costo (distanza) minimo.
begin
W := {s}
for all y V {s} do l(y) := c
sy
while t / W do:
begin
min{l(y) : y / W} = l(p)
W = W {p}
for all y V W do:
l(y) := min{l(y), l(p) + c
py
}
end
end
Attenzione:
Lalgoritmo di Dijkstra `e un algoritmo greedy.
Lalgoritmo di Dijkstra determina una soluzione ottimale del
problema di cammino minimo (=dimostrazione per induzione)
con complessit`a O(n
2
).
14
Ricerca Operativa Teoria dei gra
Esercizio: Algoritmo di Dijkstra
Si individui il cammino minimo dal nodo 1 al nodo 10 per il grafo
ragurato di seguito, utilizzando lalgoritmo di Dijkstra.
3
11
7
10
7
11
5
8
6
2
2
4
4 4
2
4
3
0 10 2
3 8 6
5
9 7 4 1
15
l(0) = 0
+
l(i) = i = 1, 2, ,10
1
a
iterazione:
(0) = {1, 2, 3}
l(1) = min{, 3} = 3 [0]
l(2) = min{, 2} = 2 [0]
l(3) = min{, 4} = 4 [0]
l
= min{3, 2, 4} = 2
l
= l(2) = 2
+
[0]
15
Ricerca Operativa Teoria dei gra
2
a
iterazione:
(2) = {3}
l(3) = min{4, 2 + 4} = 4 [0]
l
= min{3, 4} = 3
l
= l(1) = 3
+
[0]
3
a
iterazione:
(1) = {4, 5, 6}
l(4) = min{, 3 + 8} = 11 [1]
l(5) = min{, 3 + 6} = 9 [1]
l(6) = min{, 3 + 2} = 5 [1]
l
= min{4, 11, 9, 5} = 4
l
= l(3) = 4
+
[0]
4
a
iterazione:
(3) = {6}
l(6) = min{5, 4 + 5} = 5 [1]
l
= min{11, 9, 5} = 5
l
= l(6) = 5
+
[1]
5
a
iterazione:
(6) = {7, 9}
l(7) = min{, 5 + 4} = 9 [6]
l(9) = min{, 5 + 11} = 16 [6]
l
= min{11, 9, 9, 16} = 9
16
Ricerca Operativa Teoria dei gra
l
= l(5) = 9
+
[1]
6
a
iterazione:
(5) = {6, 8} 6 `e gi`a denitivo
l(8) = min{, 9 + 7} = 16 [5]
l
= l(7) = 9
+
[6]
7
a
iterazione:
(7) = {9}
l(9) = min{16, 9 + 15} = 16 [6]
l
= l(4) = 11
+
[1]
8
a
iterazione:
(4) = {5, 7}
l
= min{16, 16} = 16
l
= l(8) = 16
+
[5]
9
a
iterazione:
(8) = {9, 10}
l(9) = min{16, 16 + 10} = 16 [6]
l(10) = min{8, 16 + 7} = 23 [8]
l
= min{16, 23} = 16
l
= l(9) = 16
+
17
Ricerca Operativa Teoria dei gra
10
a
iterazione:
(9) = {10}
l(10) = min{23, 16 + 11} = 23
l
= min{23} = 23
l
= l(10) = 23
+
[8]
Il cammino minimo fra 0 e 10 `e 0 - 1 - 5 - 8 - 10 ed ha lunghezza
23.
18
Ricerca Operativa Teoria dei gra
Esercizio da svolgere: Si individui il cammino minimo dal nodo
1 al nodo 8 per il grafo ragurato di seguito, utilizzando lalgoritmo
di Dijkstra.
1
2 5
3
4
6 8
7
3
2
2
1
1
5
2
3
3
2
4
19