You are on page 1of 19

Ricerca Operativa Teoria dei gra

TEORIA DEI GRAFI


Denizione 1 Un grafo non orientato (o indiretto) `e una cop-
pia G = (V, E) in cui V `e un insieme nito di n vertici V =
{v
1
, v
2
, , v
n
} ed E = {e
1
, e
2
, , e
m
} `e una famiglia di coppie
non ordinate di elementi di V dette lati o spigoli.
Figura 1: Grafo non orientato.
v
1
v
2
v
3
v
4
v
5
GRAFO NON
ORIENTATO
O INDIRETTO
V = {v
1
, v
2
, v
3
, v
4
, v
5
}
E = {(v
1
, v
2
), (v
1
, v
5
) }
v
1
, v
2
= sono vertici adiacenti
(v
1
, v
2
) e (v
1
, v
5
) = sono lati adiacenti
Il numero di lati incidenti in un vertice `e detto grado e verr`a indicato
con il simbolo .
Def.: (i) := {insieme dei vertici adiacenti al vertice i}.
(v
1
) = {v
2
, v
5
}
1
Ricerca Operativa Teoria dei gra
Un grafo si dice completo se contiene tutti i possibili lati cio`e se
E = {(i, j) : i, j V i j}.
Figura 2: Grafo completo.
v
1
v
4
v
2
v
3
Si denisce cammino una sequenza di lati consecutivi (adiacenti)
e
1
, e
2
, , e
k
E del tipo e
1
= [v
1
, v
2
], e
2
= [v
2
, v
3
], , e
k
=
[v
k
, v
k+1
].
Figura 3: Cammino elementare.
1
4
3
2
5
e
1
6
e
2
e
3
e
4
e
5
Cammino ciclo se v
1
= v
k+1
.
2
Ricerca Operativa Teoria dei gra
Cammino/ciclo:

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 detto sottografo di G = (V, E) se V



V
e E

E.
Se G

= (V, E

) `e detto grafo parziale di G = (V, E).


Dato un grafo non orientato G = (V, E) si dice albero di supporto
per G il grafo parziale G

(V, E

) connesso e privo di cicli.


Un albero di supporto per il grafo in gura `e dato dal grafo parziale
denito dai lati {(v
1
, v
2
), (v
2
, v
3
), (v
2
, v
4
).}
3
Ricerca Operativa Teoria dei gra
Denizione 2 Un grafo orientato (diretto) `e una coppia G =
(V, A) in cui V `e un insieme nito di n nodi V = {v
1
, v
2
, , v
n
}
ed A una famiglia di m coppie ordinate di nodi dette archi,
A = {a
1
, a
2
, , a
m
}.
Figura 5: Grafo orientato.
v
1
v
2
v
3
v
4
v
5
GRAFO ORIENTATO
O DIRETTO
Molte delle denizioni per gra non orientati si estendono anche a
gra orientati.
Grado uscente di un nodo:
(i)= insieme degli archi uscenti dal nodo i (vertici successori)
Grado entrante di un nodo:
(i)
1
= insieme degli archi entranti nel nodo i (vertici predecessori).
Il numero di lati incidenti in un nodo `e detto grado e verr`a indicato
con il simbolo .
Def.: (i) := {insieme dei vertici adiacenti al vertice i}.
(v
1
) = {v
2
, v
5
}
4
Ricerca Operativa Teoria dei gra
Rappresentazione di gra mediante matrici
Matrice di incidenza D = [d
ij
]

se G = (V, E) matrice di incidenza vertici-lati D(|V | |E|)


non orientato
d
ij
=
{
1 j esimo lato incidente nel vertice i,
0 altrimenti.
se G = (V, A) matrice di incidenza nodi-archi D(|V | |A|)
orientato
d
ij
=

+1 j esimo lato uscente dal vertice i,


1 j esimo lato entrante nel vertice i,
0 altrimenti.
5
Ricerca Operativa Teoria dei gra
Grafo non orientato:
Figura 6: Grafo non orientato.
1
4 3
2
5
e
a
b
c
d
f g
Matrice di incidenza:
a b c d e f g
1 1 1 0 0 0 0 0
2 1 0 1 1 1 0 0
3 0 1 1 0 0 1 0
4 0 0 0 1 0 1 1
5 0 0 0 0 1 0 1
6
Ricerca Operativa Teoria dei gra
Grafo orientato:
Figura 7: Grafo orientato.
1
4 3
2
a
b
c
d
f
e
Matrice di incidenza:
a b c d e f
1 1 -1 1 0 0 0
2 -1 0 0 1 -1 0
3 0 1 -1 0 1 -1
4 0 0 0 -1 0 1
7
Ricerca Operativa Teoria dei gra
Matrice di adiacenza
La matrice di adiacenza Q associata ad un grafo sia non orientato
G = (V, E) che orientato G = (V, A) ha dimensione |V | |V |.
Q = [q
ij
] =
{
1 se [i, j] E (oppure A) ,
0 altrimenti.
Relativamente ai gra riportati rispettivamente in Figura 6 e in
Figura 7 si ha:
Grafo non orientato:
1 2 3 4 5
1 0 1 1 0 0
2 0 1 1 1
3 0 1 0
4 0 1
5 0
`e simmetrica.
Grafo orientato:
1 2 3 4
1 0 1 1 0
2 0 0 0 1
3 1 1 0 0
4 0 0 1 0
8
Ricerca Operativa Teoria dei gra
PROBLEMA DI ALBERO A COSTO MINIMO
(Shortest Spanning Tree SST)
Dato un grafo non orientato G = (V, E), con |V | = n, il problema
consiste nellindividuare un albero G
T
= (V, T) di costo minimo,
ossia un grafo aciclico contenente n 1 lati.
Rappresentazione:
G = (V, E) grafo non orientato
c
e
(peso o lunghezza) per ogni e E.
Formulazione:
min

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

= min{11, 9, 16, 16} = 9


l

= l(7) = 9
+
[6]
7
a
iterazione:
(7) = {9}
l(9) = min{16, 9 + 15} = 16 [6]
l

= min{11, 16, 16} = 11


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