You are on page 1of 36

1/36

Alberi di
copertura minimi
2/36
Alberi di copertura minimi
Dato un grafo pesato G = (V,E), si richiede di trovare
un albero T = (V,E), E_E, tale che la somma dei pesi
associati agli archi di T sia minima.
Lalbero T detto albero di copertura minimo
(minimum spanning tree, MST) di G.
3/36
MST: esempio
e
d
h
b
a
h
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
4/36
MST: esempio
e
d
h
b
a
h
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
5/36
MST - Algoritmo di Kruskal
MST-Kruskal(G,w)
A = C
foreach vertice v e V[G] do
Make-Set(v)
ordina gli archi di E[G] per pesi non decrescenti
foreach (u,v) e E[G] in ordine di peso non decr. do
if Find-Set(u) = Find-Set(v)
then A = A {(u,v)}
Union(u,v)
return A
Make-Set(v): crea un insieme con unico membro v
Find-Set(v): restituisce il rappresentante dellinsieme contenente
v
Union(u,v): unisce i due insiemi che contengono u e v
6/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
7/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
8/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
9/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
10/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
11/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
12/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
13/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
14/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
15/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
16/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
17/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
18/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
19/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
20/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
21/36
Kruskal: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
22/36
Kruskal: correttezza
Teorema
Siano
G(V,E) il grafo dato in input
G(V,E) sottografo di qualche MST di G, contenente tutti i vertici e alcuni
archi di G
G
1
(V
1
,E
1
) G
2
(V
2
,E
2
) - partizione di G in due componenti non connesse
e e E arco di peso minimo che connette G
1
e G
2

Allora anche G(V,E {e}) un sottografo di qualche MST
23/36
Kruskal: correttezza
G
1
G
2
e
e
Sia T un albero di copertura contenente e, con w(e)>w(e).
Se si sostituisce e con e si ottiene un altro albero di
copertura T con w(T) > w(T).
Quindi T un albero di copertura di costo inferiore a T.
24/36
Kruskal: complessit
T(V,E) = O(V) + O(E log E) + O(E log
-
E) = O(E log E)
Inizializzazione: O(V)
Ordinamento archi: O(E lg E)
Operazioni nella foresta di insiemi disgiunti: O(E)
Tempo complessivmante richiesto: O(E o(E,V)) = O(E lg* E)
25/36
MST: algoritmo di Prim
MST-Prim(G,w,r)
Q = V[G]
foreach u e Q do key[u] =
key[r] = 0
t[r] = nil
while Q = C do
u = Extract-Min(Q)
foreach v e Adj(u) do
if v e Q and w(u,v) < key[v]
then t[v] = u
key[v] = w(u,v)
Nellalgoritmo di Prim gli archi dellinsieme in costruzione
formano sempre un unico albero
26/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
27/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
28/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
29/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
30/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
31/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
32/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
33/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
34/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
35/36
Prim: esempio
e
d
h
b
a
g
c
i
f
8 7
1 2
9
10
14
4
8
11
7
2
6
4
36/36
Prim: complessit
T(V,E) = O(V) + O(V log V) + O(E) = O(E + V log V)