La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Minimum Spanning Tree Moreno Marzolla

Presentazioni simili


Presentazione sul tema: "Minimum Spanning Tree Moreno Marzolla"— Transcript della presentazione:

1 Minimum Spanning Tree Moreno Marzolla http://www.moreno.marzolla.name/

2 Algoritmi e Strutture Dati2 Original work Copyright © Alberto Montresor, Università di Trento, Italy (http://www.dit.unitn.it/~montreso/asd/index.shtml) Modifications Copyright © 2010, 2011 Moreno Marzolla, Università di Bologna, Italy (http://www.moreno.marzolla.name/teaching/ASD2010/) This work is licensed under the Creative Commons Attribution-NonCommercial- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

3 Algoritmi e Strutture Dati3 Introduzione ● Un problema di notevole importanza: – determinare come interconnettere diversi elementi fra loro minimizzando certi vincoli sulle connessioni ● Esempio classico: – progettazione dei circuiti elettronici dove si vuole minimizzare la quantità di filo elettrico per collegare fra loro i diversi componenti ● Questo problema prende il nome di: – albero di copertura (di peso) minimo – albero di connessione (di peso) minimo – minimum spanning tree

4 Algoritmi e Strutture Dati4 Definizione del problema a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

5 Algoritmi e Strutture Dati5 Definizione del problema ● Albero di copertura (spanning tree) – Dato un grafo G=(V,E) non orientato e connesso, un albero di copertura di G è un sottografo T=(V, E T ) tale che ● T è un albero ● E T  E ● T contiene tutti i vertici di G a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

6 Algoritmi e Strutture Dati6 Definizione del problema ● Output: albero di copertura minimo (minimum spanning tree) – Un albero di copertura il cui peso totale sia minimo

7 Algoritmi e Strutture Dati7 Definizione del problema ● Nota: L’albero di copertura di peso minimo non è necessariamente unico a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

8 Algoritmi e Strutture Dati8 Algoritmo generico ● Vediamo – Un algoritmo di tipo “goloso” generico – Due “istanze” di questo algoritmo: Kruskal e Prim ● L'idea è di accrescere un sottoinsieme A di archi in modo tale che venga rispettata la seguente condizione: – A è un sottoinsieme di qualche albero di connessione minimo ● Un arco {u,v} è detto sicuro per A se A  {u,v} è ancora un sottoinsieme di qualche albero di connessione minimo.

9 Algoritmi e Strutture Dati9 Algoritmo generico algoritmo Generic-MST(Grafo G, w)→albero 1A :=  2while A non forma un albero di copertura do 3trova un arco sicuro {u,v} 4A := A  {u,v} 5return A ● Archi blu – sono gli archi che fanno parte del MST ● Archi rossi – sono gli archi che non fanno parte del MST

10 Algoritmi e Strutture Dati10 Definizioni ● Per caratterizzare gli archi sicuri dobbiamo introdurre alcune definizioni: – Un taglio (S,V-S) di un grafo non orientato G=(V,E) è una partizione di V in due sottoinsiemi disgiunti – Un arco {u,v} attraversa il taglio se u  S e v  V-S – Un taglio rispetta un insieme di archi A se nessun arco di A attraversa il taglio – Un arco che attraversa un taglio è leggero nel taglio se il suo peso è minimo fra i pesi degli archi che attraversano un taglio

11 Algoritmi e Strutture Dati11 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Taglio Insieme A: archi blu (il taglio rispetta A) Insieme S Insieme V-S Arco leggero che attraversa il taglio

12 Algoritmi e Strutture Dati12 Regole del ciclo e del taglio ● Regola del ciclo – Scegli un ciclo semplice in G che non contenga archi rossi. Tra tutti gli archi non colorati del ciclo, seleziona un arco di costo massimo e coloralo di rosso ● Regola del taglio – Scegli un taglio in G che non contenga archi blu. Tra tutti gli archi non colorati che attraversano il taglio seleziona un arco di costo minimo e coloralo di blu ● Metodo greedy – Costruisce un MST applicando, ad ogni passo, una delle due regole precedenti (una qualunque che si possa usare)

13 Algoritmi e Strutture Dati13 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

14 Algoritmi e Strutture Dati14 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

15 Algoritmi e Strutture Dati15 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

16 Algoritmi e Strutture Dati16 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

17 Algoritmi e Strutture Dati17 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

18 Algoritmi e Strutture Dati18 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

19 Algoritmi e Strutture Dati19 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

20 Algoritmi e Strutture Dati20 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

21 Algoritmi e Strutture Dati21 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

22 Algoritmi e Strutture Dati22 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

23 Algoritmi e Strutture Dati23 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

24 Algoritmi e Strutture Dati24 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

25 Algoritmi e Strutture Dati25 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

26 Algoritmi e Strutture Dati26 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

27 Algoritmi e Strutture Dati27 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

28 Algoritmi e Strutture Dati28 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

29 Algoritmi e Strutture Dati29 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

30 Algoritmi e Strutture Dati30 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

31 Algoritmi e Strutture Dati31 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

32 Algoritmi e Strutture Dati32 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

33 Algoritmi e Strutture Dati33 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

34 Algoritmi e Strutture Dati34 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

35 Algoritmi e Strutture Dati35 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

36 Algoritmi e Strutture Dati36 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

37 Algoritmi e Strutture Dati37 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

38 Algoritmi e Strutture Dati38 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

39 Algoritmi e Strutture Dati39 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

40 Algoritmi e Strutture Dati40 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

41 Algoritmi e Strutture Dati41 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

42 Algoritmi e Strutture Dati42 Finito! a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

43 Algoritmi e Strutture Dati43 Archi sicuri (regola del taglio) Teorema: Sia G=(V,E) un grafo non orientato e connesso Sia w una funzione peso a valori reali definita su E. Sia A  E composto di soli archi blu (A è contenuto in un albero di copertura minimo per G). Sia (S,V-S) un taglio che rispetta A, ossia che non contiene archi blu Sia (u,v) un arco leggero che attraversa il taglio. Allora l’arco (u,v) è sicuro per A

44 Algoritmi e Strutture Dati44 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Arco sicuro

45 Algoritmi e Strutture Dati45 Arco non sicuro perché il taglio non rispetta A Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

46 Algoritmi e Strutture Dati46 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Arco sicuro

47 Algoritmi e Strutture Dati47 Esempio a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Arco non sicuro perché non leggero

48 Algoritmi e Strutture Dati48 Archi sicuri Corollario: Sia G=(V,E) un grafo non orientato e connesso Sia w una funzione peso a valori reali definita su E. Sia A  E contenuto in un albero di copertura minimo per G. Sia C una componente connessa (un albero) nella foresta G A =(V,A) Sia (u,v) un arco leggero che connette C a qualche altra componente in G A Allora l’arco (u,v) è sicuro per A

49 Algoritmi e Strutture Dati49 Teorema ● Sia G un grafo non orientato, connesso e pesato sugli archi. Ogni passo di colorazione del metodo greedy mantiene la seguente invariante – “Esiste sempre un minimo albero ricoprente di G che contiene tutti gli archi blu, e che non contiene alcun arco rosso” ● Inoltre, il metodo goloso colora tutti gli archi di G

50 Algoritmi e Strutture Dati50 Dimostrazione per induzione sul numero di passi ● All'inizio (nessun passo di colorazione) l'invariante è banalmente mantenuta perché non ci sono archi colorati, né rossi né blu

51 Algoritmi e Strutture Dati51 Dimostrazione per induzione sul numero di passi ● Supponiamo l'invariante sia vera prima di applicare la regola del taglio ● Sia (S, V-S) il taglio considerato, e={u,v} l'arco del taglio di peso minimo che è stato colorato di blu, T il MST di G che verificava l'invariante prima della colorazione di e

52 Algoritmi e Strutture Dati52 Caso 1: e  T uv 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Gli archi grigi sono quelli di T, ma non ancora colorati uv 4 8 11 8 1 7 6 2 4 7 14 9 10 2 e

53 Algoritmi e Strutture Dati53 Caso 2: e  T uv 4 8 11 8 1 7 6 2 4 7 14 9 10 2 u v 4 8 11 8 1 7 6 2 4 7 14 9 10 2 e

54 Algoritmi e Strutture Dati54 Caso 2: e  T u v 4 8 11 8 1 7 6 2 4 7 14 9 10 2 e ● Consideriamo il cammino che collega u e v in T ● Deve esistere un arco e' di T che attraversa il taglio – Grazie all'invariante, e' sicuramente non è rosso ● Poiché abbiamo applicato la regola del taglio: – e' sicuramente non era colorato; – w(e) ≤ w(e') e'

55 Algoritmi e Strutture Dati55 Caso 2: e  T u v 4 8 11 8 1 7 6 2 4 7 14 9 10 2 e ● Poiché abbiamo applicato la regola del taglio: – e' sicuramente non era colorato; – w(e) ≤ w(e') ● Ma allora l'albero (T – e') U e – è un MST – soddisfa l'invariante dopo la colorazione di e e'

56 Algoritmi e Strutture Dati56 Dimostrazione per induzione sul numero di passi ● Supponiamo l'invariante sia vera prima di applicare la regola del ciclo ● Sia e={u,v} l'arco del ciclo che è stato colorato di rosso, T il MST di G che verificava l'invariante prima della colorazione di e

57 Algoritmi e Strutture Dati57 Caso 1: e  T u v 4 8 11 8 1 7 6 2 4 7 14 9 10 2 u v 4 8 11 8 1 7 6 2 4 7 14 9 10 2 e

58 Algoritmi e Strutture Dati58 Caso 2: e  T uv 4 8 11 8 1 7 6 2 4 7 14 9 10 2 ● Se coloriamo di rosso e, spezziamo l'albero T in due sottoalberi, uno che contiene u e l'altro che contiene v ● Consideriamo il ciclo che abbiamo usato per colorare e={u,v} – in tale ciclo deve esserci un altro arco e' con gli estremi nei due sottoalberi – e' non era rosso, altrimenti non potevamo applicare la regola del ciclo – e' non era nemmeno blu, altrimenti T non sarebbe stato un albero e e'

59 Algoritmi e Strutture Dati59 Caso 2: e  T uv 4 8 11 8 1 7 6 2 4 7 14 9 10 2 ● Poiché la regola del ciclo ha colorato e, risulta che w(e) ≥ w(e') ● Ma allora l'albero T' = (T – e) U e' verificherà l'invariante dopo l'applicazione della regola del ciclo e e'

60 Algoritmi e Strutture Dati60 Algoritmo di Kruskal ● Idea – Ingrandire sottoinsiemi disgiunti di un albero di copertura minimo connettendoli fra di loro fino ad avere l’albero complessivo ● Inizialmente la foresta di copertura è composta da n alberi, un albero per ciascun nodo, e nessun arco – Si considerano gli archi in ordine non decrescente di peso ● Se l'arco e={u,v} considerato connette due alberi blu distinti, lo si colora di blu (usando la regola del taglio). Altrimenti lo si colora di rosso – L’algoritmo è greedy perché ad ogni passo si aggiunge alla foresta un arco con il peso minore Joseph B. Kruskal: On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem. In: Proceedings of the American Mathematical Society, Vol 7, No. 1 (Feb, 1956), pp. 48–50

61 Algoritmi e Strutture Dati61 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

62 Algoritmi e Strutture Dati62 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

63 Algoritmi e Strutture Dati63 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

64 Algoritmi e Strutture Dati64 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

65 Algoritmi e Strutture Dati65 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

66 Algoritmi e Strutture Dati66 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

67 Algoritmi e Strutture Dati67 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

68 Algoritmi e Strutture Dati68 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

69 Algoritmi e Strutture Dati69 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

70 Algoritmi e Strutture Dati70 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

71 Algoritmi e Strutture Dati71 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

72 Algoritmi e Strutture Dati72 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

73 Algoritmi e Strutture Dati73 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

74 Algoritmi e Strutture Dati74 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

75 Algoritmi e Strutture Dati75 Esempio Algoritmo di Kruskal a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 ● Finito! Il MST è composto dai soli archi blu

76 Algoritmi e Strutture Dati76 Algoritmo di Kruskal: implementazione ● Ordinare gli archi in ordine non decrescente di peso – Sappiamo come fare ● Determinare se gli estremi di un arco appartengono allo stesso albero oppure no – Anche qui, sappiamo come fare... –...usando le strutture union-find!

77 Algoritmi e Strutture Dati77 Algoritmo di Kruskal Algoritmo Kruskal-MST(Grafo G=(V,E), w)->albero T := albero vuoto// foresta iniziale UnionFind UF; for each v in V do UF.makeSet(v) endfor // ordina gli archi di E per peso w crescente sort(E, w) for each {u,v} in E do Tu = UF.find(u) Tv = UF.find(v) if (Tu != Tv) then// evita i cicli T := T U {u,v}// aggiungi arco UF.union(Tx,Ty) // unisci componenti endif endfor return T

78 Algoritmi e Strutture Dati78 Analisi ● L'ordinamento richiede O(m log m) = O(m log n 2 ) = O(m log n) ● Il tempo di esecuzione dipende dalla realizzazione della struttura dati per insiemi disgiunti – Vengono effettuate n makeset, 2m find e (n-1) union ● Se usiamo quickUnion con euristica sul rango, la sequenza di operazioni costa in tutto O(m + n log n) ● Totale: O(m log n + m + n log n) = O(m log n)

79 Algoritmi e Strutture Dati79 Algoritmo di Prim ● L’algoritmo di Prim procede mantenendo in A un singolo albero – L’albero parte da un vertice arbitrario r (la radice) e cresce fino a quando non ricopre tutti i vertici – Ad ogni passo viene aggiunto un arco leggero che collega un vertice in V A con un vertice in V-V A ● dove V A è l'insieme di nodi raggiunti da archi in A ● Correttezza – (V A,V-V A ) è un taglio che rispetta A (per definizione) – Per il corollario, gli archi leggeri che attraversano il taglio sono sicuri R. C. Prim: Shortest connection networks and some generalizations. In: Bell System Technical Journal, 36 (1957), pp. 1389–1401

80 Algoritmi e Strutture Dati80 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

81 Algoritmi e Strutture Dati81 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

82 Algoritmi e Strutture Dati82 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

83 Algoritmi e Strutture Dati83 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

84 Algoritmi e Strutture Dati84 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

85 Algoritmi e Strutture Dati85 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

86 Algoritmi e Strutture Dati86 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

87 Algoritmi e Strutture Dati87 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

88 Algoritmi e Strutture Dati88 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2

89 Algoritmi e Strutture Dati89 Implementazione ● Una struttura dati per i nodi non ancora nell'albero – Durante l'esecuzione, i vertici non ancora nell'albero si trovano in una coda con priorità Q ordinata in base ad un campo d(v) – d(v) è il peso minimo di un arco che collega v ad un vertice nell'albero, o +  se tale arco non esiste ● Come mantenere l'albero – Ogni nodo v mantiene un puntatore al padre v.p – T è mantenuto implicitamente: T = { (v, v.p) | v  V-Q-{r} } ● Terminazione: quando l'insieme Q è vuoto – Tutti i nodi tranne la radice conoscono il proprio padre

90 Algoritmi e Strutture Dati90 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Q = { (f,4), (g,6), (h,7), (d,7) }

91 Algoritmi e Strutture Dati91 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Q = { (f,4), (g,6), (h,7), (d,7) }

92 Algoritmi e Strutture Dati92 Esempio Algoritmo di Prim a b h i c g d f e 4 8 11 8 1 7 6 2 4 7 14 9 10 2 Q = { (g,6), (h,7), (d,7) } Q = { (g,2), (h,7), (d,7), (e,10) }

93 Algoritmi e Strutture Dati93 Algoritmo di Prim algoritmo Prim(Grafo G=(V,E), nodo s)→albero for each v in V do d(v) :=  endfor T := albero formato dal solo nodo s CodaPriorita Q; d(s) := 0; Q.insert(s,0); while (not Q.isEmpty()) do u := Q.deleteMin(); for each {u,v}  E do if (d(v) =  ) then Q.insert(v,w(u,v)); d(v) := w(u,v); rendi u padre di v in T; else if (w(u,v) < d(v)) then Q.decreaseKey(v,w(u,v)); d(v) := w(u,v); rendi u nuovo padre di v in T; endif endfor endwhile return T; d(v) è il peso minimo dell'arco che connette v con l'albero T; +  se tale arco non esiste setta nuovo peso di v a w(u,v)

94 Algoritmi e Strutture Dati94 Esempio di esecuzione ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { }

95 Algoritmi e Strutture Dati95 Esempio di esecuzione 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (a,0) }

96 Algoritmi e Strutture Dati96 Esempio di esecuzione 0 4 8 ∞ ∞ ∞ ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (b,4), (h,8) }

97 Algoritmi e Strutture Dati97 Esempio di esecuzione 0 4 8 ∞ ∞ ∞ ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (b,4), (h,8) }

98 Algoritmi e Strutture Dati98 Esempio di esecuzione 0 4 8 ∞ 8 ∞ ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (h,8), (c,8) }

99 Algoritmi e Strutture Dati99 Esempio di esecuzione 0 4 8 ∞ 8 ∞ ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (h,8), (c,8) }

100 Algoritmi e Strutture Dati100 Esempio di esecuzione 0 4 8 7 8 1 ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (g,1), (i,7), (c,8) }

101 Algoritmi e Strutture Dati101 Esempio di esecuzione 0 4 8 7 8 1 ∞ ∞ ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (g,1), (i,7), (c,8) }

102 Algoritmi e Strutture Dati102 Esempio di esecuzione 0 4 8 6 8 1 ∞ 2 ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (f,2), (i,6), (c,8) }

103 Algoritmi e Strutture Dati103 Esempio di esecuzione 0 4 8 6 8 1 ∞ 2 ∞ 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (f,2), (i,6), (c,8) }

104 Algoritmi e Strutture Dati104 Esempio di esecuzione 0 4 8 6 4 1 1414 2 1010 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (c,4), (i,6), (e,10), (d,14) }

105 Algoritmi e Strutture Dati105 Esempio di esecuzione 0 4 8 6 4 1 1414 2 1010 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (c,4), (i,6), (e,10), (d,14) }

106 Algoritmi e Strutture Dati106 Esempio di esecuzione 0 4 8 2 4 1 7 2 1010 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (i,2), (d,7), (e,10) }

107 Algoritmi e Strutture Dati107 Esempio di esecuzione 0 4 8 2 4 1 7 2 1010 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (i,2), (d,7), (e,10) }

108 Algoritmi e Strutture Dati108 Esempio di esecuzione 0 4 8 2 4 1 7 2 1010 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (d,7), (e,10) }

109 Algoritmi e Strutture Dati109 Esempio di esecuzione 0 4 8 2 4 1 7 2 1010 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (d,7), (e,10) }

110 Algoritmi e Strutture Dati110 Esempio di esecuzione 0 4 8 2 4 1 7 2 9 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (e,9) }

111 Algoritmi e Strutture Dati111 Esempio di esecuzione 0 4 8 2 4 1 7 2 9 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { (e,9) }

112 Algoritmi e Strutture Dati112 Esempio di esecuzione 0 4 8 2 4 1 7 2 9 4 8 11 8 1 7 6 2 4 7 14 9 10 2 a bcd e fgh i Q = { }

113 Algoritmi e Strutture Dati113 algoritmo Prim(Grafo G=(V,E), nodo s)→albero for each v in V do d(v) :=  endfor T := albero formato dal solo nodo s CodaPriorita Q; d(s) := 0; Q.insert(s,0); while (not Q.isEmpty()) do u := Q.deleteMin(); for each {u,v}  E do if (d(v) =  ) then Q.insert(v,w(u,v)); d(v) := w(u,v); rendi u padre di v in T; else if (w(u,v) < d(v)) then Q.decreaseKey(v,w(u,v)); d(v) := w(u,v); rendi u nuovo padre di v in T; endif endfor endwhile return T; Algoritmo di Prim algoritmo Prim(Grafo G=(V,E), nodo s)→albero for each v in V do d(v) :=  endfor T := albero formato dal solo nodo s CodaPriorita Q; d(s) := 0; Q.insert(s,0); while (not Q.isEmpty()) do u := Q.deleteMin(); for each {u,v}  E do if (d(v) =  ) then Q.insert(v,w(u,v)); d(v) := w(u,v); rendi u padre di v in T; else if (w(u,v) < d(v)) then Q.decreaseKey(v,w(u,v)); d(v) := w(u,v); rendi u nuovo padre di v in T; endif endfor endwhile return T; vengono eseguite n operazioni deleteMin() vengono eseguite n operazioni insert() (inclusa Q.insert(s,0) ) vengono eseguite O(m) decreaseKey()

114 Algoritmi e Strutture Dati114 Algoritmo di Prim Costo computazionale ● Utilizzando heap binari – n deleteMin() costano O(n log n) – n insert() costano O(n log n) – O(m) decreaseKey() costano O( m log n ) ● Totale – O(n log n + n log n + m log n ) = O(m log n + n log n ) = O(m log n) Ricordiamo che il grafo G deve essere connesso, quindi m ≥ n-1


Scaricare ppt "Minimum Spanning Tree Moreno Marzolla"

Presentazioni simili


Annunci Google