You are on page 1of 19

Ricerca Operativa

Teoria dei grafi

TEORIA DEI GRAFI

Definizione 1 Un grafo non orientato (o indiretto) `e una cop- pia G = (V, E) in cui V `e un insieme finito di n vertici V =

v 2 , ··· , v n } ed E = {e 1 , e 2 , ··· , e m } `e una famiglia di coppie

{v 1 ,

non ordinate di elementi di V dette lati o spigoli.

Figura 1: Grafo non orientato.

v 1 v 3 v 2 v 4 V = {v 1 , v 2
v 1
v
3
v 2
v 4
V
= {v 1 , v 2 , v 3 , v 4 , v 5 }
E
= {(v 1 , v 2 ), (v 1 , v 5 ) ···}

GRAFO NON ORIENTATO O INDIRETTO

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 grafi

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 3
v 4
v 3

v 2

Si definisce 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.

e e 1 2 1 2 3 e 3 e 4 6 4 5 e
e
e
1
2
1
2
3
e 3
e 4
6
4
5
e
5

Cammino −→ ciclo se v 1 = v k+1 .

2

Ricerca Operativa

Teoria dei grafi

 

elementare se

semplice se

e i ̸= e j

i ̸= j

Cammino/ciclo:

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 3
v 2
v 3

v 4

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 figura `e dato dal grafo parziale definito dai lati {(v 1 , v 2 ), (v 2 , v 3 ), (v 2 , v 4 ).}

3

Ricerca Operativa

Teoria dei grafi

Definizione 2 Un grafo orientato (diretto) `e una coppia G = (V, A) in cui V `e un insieme finito 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 }.

v 2

Figura 5: Grafo orientato.

v 1 v 3
v 1
v
3

GRAFO ORIENTATO O DIRETTO

v 5

v 4

Molte delle definizioni per grafi non orientati si estendono anche a grafi 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 grafi

Rappresentazione di grafi mediante matrici

Matrice di incidenza D = [d ij ]

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

d ij = {

non orientato

1

0

j esimo lato incidente nel vertice i,

altrimenti.

se G = (V, A) matrice di incidenza nodi-archi D(|V | × |A|) orientato

d ij =


+1

1

0

  altrimenti.

j esimo lato uscente dal vertice i,

j esimo lato entrante nel vertice i,

5

Ricerca Operativa

Teoria dei grafi

Grafo non orientato:

Figura 6: Grafo non orientato.

b

a e 1 c 2 5 d 3 4 f g
a
e
1
c
2
5
d
3
4
f
g

Matrice di incidenza:

a

b

c

d

e

f

g

1

1 1

0

0

0

0

0

1

2 0

1

1

1

0

0

0

3 1

1

0

0

1

0

0

4 0

0

1

0

1

1

0

5 0

0

0

1

0

1

6

Ricerca Operativa

Teoria dei grafi

Grafo orientato:

b

Figura 7: Grafo orientato.

a 1 2 c e 3 4 f
a
1
2
c
e
3
4
f

d

 

a

b

c

d

e

f

1 1

-1

1

0

0

0

Matrice di incidenza:

2 -1

0

0

1

-1

0

0

3 1

-1

0

1

-1

4 0

0

0

-1

0

1

7

Ricerca Operativa

Teoria dei grafi

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

0

se [i, j] E (oppure A) ,

altrimenti.

Relativamente ai grafi 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 grafi

PROBLEMA DI ALBERO A COSTO MINIMO (Shortest Spanning Tree SST)

Dato un grafo non orientato G = (V, E), con |V | = n, il problema consiste nell’individuare 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

c e x e

eE

x e = n 1

eE

x e ≤ |S| − 1

eE(S)

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 grafi

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 grafi

Esempio Algoritmo di Kruskal

Determinare l’albero a costo minimo del grafo rappresentato in figura.

3 v v 1 2 10 13 5 9 v v 3 4 1 1
3
v
v
1
2
10
13
5
9
v
v
3
4
1
1
v
5

7

e

e

j j

c(e j

c(e j

)

)

(v (v ,v ,v ) ) 3 3 5 5 (v (v ,v ,v )
(v (v
,v
,v )
)
3 3
5
5
(v (v
,v
,v )
)
4 4
5
5
(v (v
1 ,v
,v )
)
1
2
2
(v (v
1 ,v
,v )
)
1
3
3
(v (v
,v
,v )
)
2 2
5
5
(v (v
,v )
,v
)
3 3
4
4
(v (v
1 ,v
,v )
)
1
4
4
(v (v
,v
,v )
)
2 2
4
4

1 1

1 1

3 3

5 5

7 7

9 9

10 10

13 13

11

Ricerca Operativa

Teoria dei grafi

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)

j:(k,j)A

min

(i,j)A

c ij x ij

j:(s,j)A

x sj

j:(j,s)A

x js = 1

x tj

j:(t,j)A

j:(j,t)A

x kj

j:(j,k)A

x jk = 0

x jt = 1

k V \ {s, t}

0 x ij 1

(i, j) A

12

Ricerca Operativa

Teoria dei grafi

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.

12 2 6 15 6 6 3 7 4 1 5 4 3 7 12
12
2
6
15
6
6
3
7
4
1
5 4
3
7
12
10
5

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

0

x 43 (x 14 + x 24 + x 54 ) = 0

x 54 x 15 = 0

x 67 + x 63 x 26 = 0

x 37 (x 23 + x 43 + x 63 ) =

0 x ij 1

i, j

Si osservi che non `e necessario porre x ij ∈ {0, 1} ∀i, j poich´e la matrice dei vincoli `e TUM.

13

Ricerca Operativa

Teoria dei grafi

Algoritmo di Dijkstra

INPUT: grafo G = (V, A) orientato con c ij 0 nodi s e t;

OUTPUT: cammino da s a t a costo (distanza) minimo.

(i, j) A;

begin

W := {s}

for all y V

while t / W do:

− {s} do l(y) := c sy

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:

L’algoritmo di Dijkstra `e un algoritmo greedy.

L’algoritmo 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 grafi

Esercizio: Algoritmo di Dijkstra

Si individui il cammino minimo dal nodo 1 al nodo 10 per il grafo raffigurato di seguito, utilizzando l’algoritmo di Dijkstra.

8 2 15 1 4 7 9 3 6 3 11 2 4 11 0
8
2
15
1
4
7
9
3
6
3
11
2
4
11
0
2
2
5
10
10
4
4
4
7
7
3
6
8
5
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

l = l(2) = 2 + [0]

= min{3, 2, 4} = 2

15

Ricerca Operativa

Teoria dei grafi

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

l = l(3) = 4 + [0]

= min{4, 11, 9, 5} = 4

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 grafi

l = l(5) = 9 + [1]

6 a iterazione:

Γ(5) = {6, 8} 6 `e gi`a definitivo 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 grafi

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 grafi

Esercizio da svolgere: Si individui il cammino minimo dal nodo 1 al nodo 8 per
Esercizio da svolgere: Si individui il cammino minimo dal nodo
1 al nodo 8 per il grafo raffigurato di seguito, utilizzando l’algoritmo
di Dijkstra.
2
5
5
1
4
3
2
2
2
1
3
6
8
1
3
2
3
4
7

19