Minimum Spanning Tree Moreno Marzolla

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Boruvka Algoritmi.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente.
Sottoinsiemi disgiunti
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
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.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal (*) Algoritmi e Strutture Dati.
Strutture dati per insiemi disgiunti Alberi di copertura minimi
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmo di Prim Algoritmi e Strutture.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Tecniche Algoritmiche/1 Divide et Impera Moreno Marzolla
Statistiche d'ordine Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Alberi Binari di Ricerca Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Algoritmi di Visita di Grafi Moreno Marzolla
Cammini minimi Moreno Marzolla
Code con priorità Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Union-Find Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Tecniche Algoritmiche/3 Algoritmi greedy Moreno Marzolla
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Cammini minimi in grafi:
Progettare algoritmi veloci usando strutture dati efficienti
Logica binaria Moreno Marzolla
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi e Strutture Dati
K4 è planare? E K3,3 e K5 sono planari? Sì!
per rappresentare grafi
Lezione n°11 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
ABBINAMENTO Lezione n°13
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Usi (meno scontati) della visita DFS
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Cammini minimi in grafi:
Insiemi disgiunti.
Algoritmi e Strutture Dati
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Minimum Spanning Tree Moreno Marzolla

Algoritmi e Strutture Dati2 Original work Copyright © Alberto Montresor, Università di Trento, Italy ( Modifications Copyright © 2010, 2011 Moreno Marzolla, Università di Bologna, Italy ( This work is licensed under the Creative Commons Attribution-NonCommercial- ShareAlike License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

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

Algoritmi e Strutture Dati4 Definizione del problema a b h i c g d f e

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

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

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 a b h i c g d f e

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.

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

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

Algoritmi e Strutture Dati11 Esempio a b h i c g d f e Taglio Insieme A: archi blu (il taglio rispetta A) Insieme S Insieme V-S Arco leggero che attraversa il taglio

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)

Algoritmi e Strutture Dati13 Esempio a b h i c g d f e

Algoritmi e Strutture Dati14 Esempio a b h i c g d f e

Algoritmi e Strutture Dati15 Esempio a b h i c g d f e

Algoritmi e Strutture Dati16 Esempio a b h i c g d f e

Algoritmi e Strutture Dati17 Esempio a b h i c g d f e

Algoritmi e Strutture Dati18 Esempio a b h i c g d f e

Algoritmi e Strutture Dati19 Esempio a b h i c g d f e

Algoritmi e Strutture Dati20 Esempio a b h i c g d f e

Algoritmi e Strutture Dati21 Esempio a b h i c g d f e

Algoritmi e Strutture Dati22 Esempio a b h i c g d f e

Algoritmi e Strutture Dati23 Esempio a b h i c g d f e

Algoritmi e Strutture Dati24 Esempio a b h i c g d f e

Algoritmi e Strutture Dati25 Esempio a b h i c g d f e

Algoritmi e Strutture Dati26 Esempio a b h i c g d f e

Algoritmi e Strutture Dati27 Esempio a b h i c g d f e

Algoritmi e Strutture Dati28 Esempio a b h i c g d f e

Algoritmi e Strutture Dati29 Esempio a b h i c g d f e

Algoritmi e Strutture Dati30 Esempio a b h i c g d f e

Algoritmi e Strutture Dati31 Esempio a b h i c g d f e

Algoritmi e Strutture Dati32 Esempio a b h i c g d f e

Algoritmi e Strutture Dati33 Esempio a b h i c g d f e

Algoritmi e Strutture Dati34 Esempio a b h i c g d f e

Algoritmi e Strutture Dati35 Esempio a b h i c g d f e

Algoritmi e Strutture Dati36 Esempio a b h i c g d f e

Algoritmi e Strutture Dati37 Esempio a b h i c g d f e

Algoritmi e Strutture Dati38 Esempio a b h i c g d f e

Algoritmi e Strutture Dati39 Esempio a b h i c g d f e

Algoritmi e Strutture Dati40 Esempio a b h i c g d f e

Algoritmi e Strutture Dati41 Esempio a b h i c g d f e

Algoritmi e Strutture Dati42 Finito! a b h i c g d f e

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

Algoritmi e Strutture Dati44 Esempio a b h i c g d f e Arco sicuro

Algoritmi e Strutture Dati45 Arco non sicuro perché il taglio non rispetta A Esempio a b h i c g d f e

Algoritmi e Strutture Dati46 Esempio a b h i c g d f e Arco sicuro

Algoritmi e Strutture Dati47 Esempio a b h i c g d f e Arco non sicuro perché non leggero

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

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

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

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

Algoritmi e Strutture Dati52 Caso 1: e  T uv Gli archi grigi sono quelli di T, ma non ancora colorati uv e

Algoritmi e Strutture Dati53 Caso 2: e  T uv u v e

Algoritmi e Strutture Dati54 Caso 2: e  T u v 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'

Algoritmi e Strutture Dati55 Caso 2: e  T u v 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'

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

Algoritmi e Strutture Dati57 Caso 1: e  T u v u v e

Algoritmi e Strutture Dati58 Caso 2: e  T uv ● 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'

Algoritmi e Strutture Dati59 Caso 2: e  T uv ● 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'

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

Algoritmi e Strutture Dati61 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati62 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati63 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati64 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati65 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati66 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati67 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati68 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati69 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati70 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati71 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati72 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati73 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati74 Esempio Algoritmo di Kruskal a b h i c g d f e

Algoritmi e Strutture Dati75 Esempio Algoritmo di Kruskal a b h i c g d f e ● Finito! Il MST è composto dai soli archi blu

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!

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

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)

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

Algoritmi e Strutture Dati80 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati81 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati82 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati83 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati84 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati85 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati86 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati87 Esempio Algoritmo di Prim a b h i c g d f e

Algoritmi e Strutture Dati88 Esempio Algoritmo di Prim a b h i c g d f e

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

Algoritmi e Strutture Dati90 Esempio Algoritmo di Prim a b h i c g d f e Q = { (f,4), (g,6), (h,7), (d,7) }

Algoritmi e Strutture Dati91 Esempio Algoritmo di Prim a b h i c g d f e Q = { (f,4), (g,6), (h,7), (d,7) }

Algoritmi e Strutture Dati92 Esempio Algoritmo di Prim a b h i c g d f e Q = { (g,6), (h,7), (d,7) } Q = { (g,2), (h,7), (d,7), (e,10) }

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)

Algoritmi e Strutture Dati94 Esempio di esecuzione ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ a bcd e fgh i Q = { }

Algoritmi e Strutture Dati95 Esempio di esecuzione 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ a bcd e fgh i Q = { (a,0) }

Algoritmi e Strutture Dati96 Esempio di esecuzione ∞ ∞ ∞ ∞ ∞ ∞ a bcd e fgh i Q = { (b,4), (h,8) }

Algoritmi e Strutture Dati97 Esempio di esecuzione ∞ ∞ ∞ ∞ ∞ ∞ a bcd e fgh i Q = { (b,4), (h,8) }

Algoritmi e Strutture Dati98 Esempio di esecuzione ∞ 8 ∞ ∞ ∞ ∞ a bcd e fgh i Q = { (h,8), (c,8) }

Algoritmi e Strutture Dati99 Esempio di esecuzione ∞ 8 ∞ ∞ ∞ ∞ a bcd e fgh i Q = { (h,8), (c,8) }

Algoritmi e Strutture Dati100 Esempio di esecuzione ∞ ∞ ∞ a bcd e fgh i Q = { (g,1), (i,7), (c,8) }

Algoritmi e Strutture Dati101 Esempio di esecuzione ∞ ∞ ∞ a bcd e fgh i Q = { (g,1), (i,7), (c,8) }

Algoritmi e Strutture Dati102 Esempio di esecuzione ∞ 2 ∞ a bcd e fgh i Q = { (f,2), (i,6), (c,8) }

Algoritmi e Strutture Dati103 Esempio di esecuzione ∞ 2 ∞ a bcd e fgh i Q = { (f,2), (i,6), (c,8) }

Algoritmi e Strutture Dati104 Esempio di esecuzione a bcd e fgh i Q = { (c,4), (i,6), (e,10), (d,14) }

Algoritmi e Strutture Dati105 Esempio di esecuzione a bcd e fgh i Q = { (c,4), (i,6), (e,10), (d,14) }

Algoritmi e Strutture Dati106 Esempio di esecuzione a bcd e fgh i Q = { (i,2), (d,7), (e,10) }

Algoritmi e Strutture Dati107 Esempio di esecuzione a bcd e fgh i Q = { (i,2), (d,7), (e,10) }

Algoritmi e Strutture Dati108 Esempio di esecuzione a bcd e fgh i Q = { (d,7), (e,10) }

Algoritmi e Strutture Dati109 Esempio di esecuzione a bcd e fgh i Q = { (d,7), (e,10) }

Algoritmi e Strutture Dati110 Esempio di esecuzione a bcd e fgh i Q = { (e,9) }

Algoritmi e Strutture Dati111 Esempio di esecuzione a bcd e fgh i Q = { (e,9) }

Algoritmi e Strutture Dati112 Esempio di esecuzione a bcd e fgh i Q = { }

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()

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