360 likes | 509 Views
Alberi di copertura minimi. 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 . L’albero T è detto albero di copertura minimo ( minimum spanning tree , MST) di G.
E N D
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. L’albero T è detto albero di copertura minimo (minimum spanning tree, MST) di G.
MST: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h h f 1 2
MST: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h h f 1 2
MST - Algoritmo di Kruskal MST-Kruskal(G,w) A = foreach vertice v V[G] do Make-Set(v) ordina gli archi di E[G]per pesi non decrescenti foreach (u,v) E[G] in ordine di peso non decr.do ifFind-Set(u) Find-Set(v) thenA = A {(u,v)} Union(u,v) return A Make-Set(v): crea un insieme con unico membro v Find-Set(v): restituisce il rappresentante dell’insieme contenente v Union(u,v): unisce i due insiemi che contengono u e v
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Kruskal: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
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 G1(V1,E1) G2(V2,E2) - partizione di G’ in due componenti non connesse e E arco di peso minimo che connette G1 e G2 Allora anche G’(V,E’ {e}) è un sottografo di qualche MST
Kruskal: correttezza e’ G1 G2 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’.
Kruskal: complessità Inizializzazione: O(V) Ordinamento archi: O(E lg E) Operazioni nella foresta di insiemi disgiunti: O(E) Tempo complessivmante richiesto: O(E (E,V)) = O(E lg* E) T(V,E) = O(V) + O(E log E) + O(E log E) = O(E log E)
MST: algoritmo di Prim Nell’algoritmo di Prim gli archi dell’insieme in costruzione formano sempre un unico albero MST-Prim(G,w,r) Q = V[G] foreach u Q dokey[u] = key[r] = 0 [r] =nil while Q do u =Extract-Min(Q) foreach v Adj(u) do ifv Q and w(u,v) < key[v] then[v] = u key[v] = w(u,v)
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: esempio 8 7 b c d 9 4 2 4 11 14 e a i 7 6 10 8 h g f 1 2
Prim: complessità T(V,E) = O(V) + O(V log V) + O(E) = O(E + V log V)