Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.