grafi: alberi di copertura minimicorsiadistanza.polito.it/corsi/pdf/09eipn/pdf/2004/09-...
TRANSCRIPT
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 1 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
Grafi:alberi di copertura minimi
Fulvio CORNO - Matteo SONZA REORDADip. Automatica e Informatica
Politecnico di Torino
A.A. 2001/2002 APA - Grafi 2 2
Sommario
IntroduzioneAlgoritmo genericoAlgoritmo di KruskalAlgoritmo di Prim.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 2 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 3
Sommario
IntroduzioneAlgoritmo genericoAlgoritmo di KruskalAlgoritmo di Prim.
A.A. 2001/2002 APA - Grafi 2 4
IntroduzioneSi consideri un grafo non orientato, pesato e connesso G=(V,E), con una funzione peso w: E→R.Il grafo G' avente le seguenti caratteristiche:
è composto dastessi vertici di Gun sottoinsieme T degli archi E (T⊆E)
è aciclicominimizza la quantità
w(T)=Σ w(u,v)è detto albero di copertura minimo (o Minimum Spanning Tree, MST).
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 3 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 5
Esempio
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
A.A. 2001/2002 APA - Grafi 2 6
Esempio
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Albero di copertura minimo
Peso totale = 37
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 4 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 7
Nota
L'albero di copertura minimo per un grafo in generale non è unico.
A.A. 2001/2002 APA - Grafi 2 8
Esempio di applicazione
Si supponga di dover realizzare l'impianto di distribuzione dell'energia elettrica di una zona, nella quale esistono un certo numero di abitazioni che devono essere servite.Di ogni abitazione si conosce la posizione, nonché la distanza da tutte le altre.L'albero di copertura minimo rappresenta la soluzione che consente la minimizzazione della lunghezza dei collegamenti da realizzare.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 5 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 9
Sommario
IntroduzioneAlgoritmo genericoAlgoritmo di KruskalAlgoritmo di Prim.
A.A. 2001/2002 APA - Grafi 2 10
Algoritmo generico
Gli algoritmi per il calcolo di un albero di copertura minimo che seguono si basano sullo stesso schema elementare.Tale schema implementa un approccio di tipo greedy.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 6 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 11
Algoritmi greedy
Sono una particolare categoria di algoritmi di ricerca o ottimizzazione.In molti problemi ad ogni passo l'algoritmo deve fare una scelta: seguendo la strategia greedy (ingordo), l'algoritmo fa la scelta più conveniente in quel momento.In tal modo non è in generale garantito che si ottenga la soluzione globalmente ottima.
A.A. 2001/2002 APA - Grafi 2 12
Pseudo-codice
Generic-MST(G,w)1 A←∅2 while A non forma un albero di copertura3 do trova un arco (u,v) che sia sicuro per A4 A←A∪{(u,v)}5 return A
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 7 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 13
Pseudo-codice
Generic-MST(G,w)1 A←∅2 while A non forma un albero di copertura3 do trova un arco (u,v) che sia sicuro per A4 A←A∪{(u,v)}5 return A Si definisce sicuro un arco che
aggiunto ad un sottoinsieme di un albero di copertura minimo
produce ancora un sottoinsieme di un albero di
copertura minimo
A.A. 2001/2002 APA - Grafi 2 14
Tagli
Dato un grafo non orientato G=(V,E), un taglio è una partizione di V in due sottoinsiemi.Un arco attraversa il taglio se uno dei suoi estremi è in una partizione, e l'altro nell'altra.Un taglio rispetta un insieme A di archi se nessun arco di A attraversa il taglio.Un arco si dice leggero se ha peso minimo tra gli archi che attraversano il taglio.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 8 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 15
Esempio
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Sottoinsieme S
Sottoinsieme V-S
Esempio di taglio
A.A. 2001/2002 APA - Grafi 2 16
Esempio
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Sottoinsieme S
Sottoinsieme V-S
In rosso un sottoinsieme di archi A.
Il taglio rispetta A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 9 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 17
Esempio
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Sottoinsieme S
Sottoinsieme V-S
L'arco (c,d) è leggero rispetto al taglio.
A.A. 2001/2002 APA - Grafi 2 18
Teorema
Sia G=(V,E) un grafo non orientato e connesso con una funzione peso w a valori reali definita su E.Sia A un sottoinsieme di E contenuto in un qualche albero di copertura minimo per G.Sia (S,V-S) un qualunque taglio che rispetta A.Sia (u,v) un arco leggero che attraversa (S,V-S).
Allora l'arco (u,v) è sicuro per A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 10 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 19
Corollario
Sia G=(V,E) un grafo non orientato e connesso con una funzione peso w a valori reali definita su E.Sia A un sottoinsieme di E contenuto in un un albero di copertura minimo per G.Sia C una componente connessa (ossia un albero) nella foresta GA=(V,A).Sia (u,v) un arco leggero che connette C ad un'altra componente in GA.Allora l'arco (u,v) è sicuro per A.
A.A. 2001/2002 APA - Grafi 2 20
Sommario
IntroduzioneAlgoritmo genericoAlgoritmo di KruskalAlgoritmo di Prim.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 11 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 21
Algoritmo di Kruskal
È riconducibile all'algoritmo generico, rispetto al quale utilizza un modo particolare per determinare un arco sicuro, basato sul precedente corollario.
A.A. 2001/2002 APA - Grafi 2 22
Pseudo-codice
MST-Kruskal(G,w)1 A←∅2 for ogni vertice v∈V[G]3 do Make-Set(V)4 ordina gli archi di E per peso w non decrescente5 for ogni arco (u,v)∈E, in ordine di peso non decrescente6 do if Find-Set(u)≠Find-Set(v)7 then A←A∪{(u,v)}8 Union(u,v)9 return A
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 12 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 23
Pseudo-codice
MST-Kruskal(G,w)1 A←∅2 for ogni vertice v∈V[G]3 do Make-Set(V)4 ordina gli archi di E per peso w non decrescente5 for ogni arco (u,v)∈E, in ordine di peso non decrescente6 do if Find-Set(u)≠Find-Set(v)7 then A←A∪{(u,v)}8 Union(u,v)9 return A
Crea un insieme per ogni vertice in V
A.A. 2001/2002 APA - Grafi 2 24
Pseudo-codice
MST-Kruskal(G,w)1 A←∅2 for ogni vertice v∈V[G]3 do Make-Set(V)4 ordina gli archi di E per peso w non decrescente5 for ogni arco (u,v)∈E, in ordine di peso non decrescente6 do if Find-Set(u)≠Find-Set(v)7 then A←A∪{(u,v)}8 Union(u,v)9 return A
Ritorna l'insieme a cui appartiene il vertice u
Ritorna l'insieme a cui appartiene il vertice v
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 13 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 25
Pseudo-codice
MST-Kruskal(G,w)1 A←∅2 for ogni vertice v∈V[G]3 do Make-Set(V)4 ordina gli archi di E per peso w non decrescente5 for ogni arco (u,v)∈E, in ordine di peso non decrescente6 do if Find-Set(u)≠Find-Set(v)7 then A←A∪{(u,v)}8 Union(u,v)9 return A
Verifica se l'arco (u,v) collega due vertici appartenenti allo stesso albero.
Se così è, aggiungendo l'arco all'albero si introdurrebbe un ciclo.
A.A. 2001/2002 APA - Grafi 2 26
Pseudo-codice
MST-Kruskal(G,w)1 A←∅2 for ogni vertice v∈V[G]3 do Make-Set(V)4 ordina gli archi di E per peso w non decrescente5 for ogni arco (u,v)∈E, in ordine di peso non decrescente6 do if Find-Set(u)≠Find-Set(v)7 then A←A∪{(u,v)}8 Union(u,v)9 return A
Gli insiemi cui appartengono i vertici u e v vengono fusi in un
unico insieme
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 14 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 27
Esempio (0)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Inizializzazione:ogni vertice costituisce
un insieme a sé.
A.A. 2001/2002 APA - Grafi 2 28
Esempio (1)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (h,g).Lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 15 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 29
Esempio (2)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (i,c).Lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 30
Esempio (3)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (g,f).Lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 16 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 31
Esempio (4)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (a,b).Lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 32
Esempio (5)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (c,f).Lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 17 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 33
Esempio (6)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (i,g).Non lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 34
Esempio (7)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (c,d).Lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 18 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 35
Esempio (8)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (i,h).Non lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 36
Esempio (9)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (b,c).Lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 19 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 37
Esempio (10)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (a,h).Non lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 38
Esempio (11)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (d,e).Lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 20 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 39
Esempio (12)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (e,f).Non lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 40
Esempio (13)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (b,h).Non lo si inserisce in A.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 21 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 41
Esempio (14)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Si considera l'arco (d,f).Non lo si inserisce in A.
A.A. 2001/2002 APA - Grafi 2 42
Complessità
MST-Kruskal(G,w)1 A←∅2 for ogni vertice v∈V[G]3 do Make-Set(V)4 ordina gli archi di E per peso w non decrescente5 for ogni arco (u,v)∈E, in ordine di peso non decrescente6 do if Find-Set(u)≠Find-Set(v)7 then A←A∪{(u,v)}8 Union(u,v)9 return A
Righe 1,2,3 (inizializzazione):O(V)
Righe 5-8: il ciclo è ripetuto
E volte
Ogni operazione sugli insiemi ha
costo O(lg E)
Riga 4 (ordinamento):
O(E lg E)
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 22 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 43
Complessità
Il tempo di esecuzione dell'algoritmo di Kruskal è O(E lg E).
A.A. 2001/2002 APA - Grafi 2 44
Sommario
IntroduzioneAlgoritmo genericoAlgoritmo di KruskalAlgoritmo di Prim.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 23 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 45
Algoritmo di PrimAnche l'algoritmo di Prim segue lo schema proposto dall'algoritmo generico, utilizzando un meccanismo per la scelta degli archi basato sul teorema introdotto in precedenza.L'algoritmo parte da un nodo radice r ed espande ad ogni passo l'albero di copertura minimo A, sino a che questo non copre tutti i vertici.Ad ogni passo viene aggiunto all'albero un arco leggero che collega un vertice in A ad un vertice in V-A.Per la scelta dell'arco leggero si usa una coda prioritaria.
A.A. 2001/2002 APA - Grafi 2 46
Coda prioritaria
Ad ogni istante contiene tutti i vertici non appartenenti all'albero A.La posizione di ciascun vertice v nella coda dipende dal valore di un campo chiave key[v], corrispondente al minimo tra i pesi degli archi che collegano v ad un qualunque vertice in A. Se v non è collegato a nessun vertice in A, allora key[v]=∞.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 24 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 47
Pseudo-codiceMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
A.A. 2001/2002 APA - Grafi 2 48
Pseudo-codiceMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
Inizializzazione della coda: tutti i vertici sono inseriti.
Per ogni vertice v≠r key[v]=∞; key[r]=0.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 25 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 49
Pseudo-codiceMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
Il vettore π contiene l'indice del vertice padre di ciascun vertice in A.
Per i vertici fuori da A, π èindefinito.
A.A. 2001/2002 APA - Grafi 2 50
Pseudo-codiceMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
Estrae un vertice dalla coda e lo aggiunge all'albero.
Aggiorna key e π.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 26 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 51
Esempio (0)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice a è la radice.
A.A. 2001/2002 APA - Grafi 2 52
Esempio (1)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice b viene aggiunto all'albero.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 27 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 53
Esempio (2)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice c viene aggiunto all'albero.
Anche il vertice h poteva essere scelto.
A.A. 2001/2002 APA - Grafi 2 54
Esempio (3)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice i viene aggiunto all'albero.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 28 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 55
Esempio (4)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice f viene aggiunto all'albero.
A.A. 2001/2002 APA - Grafi 2 56
Esempio (5)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice g viene aggiunto all'albero.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 29 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 57
Esempio (6)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice h viene aggiunto all'albero.
A.A. 2001/2002 APA - Grafi 2 58
Esempio (7)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice d viene aggiunto all'albero.
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 30 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 59
Esempio (8)
b c d
h g f
a ei
4
8
11
7 6
1 2
2
8 7
4 14
10
9
Il vertice e viene aggiunto all'albero.
A.A. 2001/2002 APA - Grafi 2 60
ComplessitàMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
Se per realizzare la coda con priorità si usa uno
heap l'inizializzazione si esegue con Build-Heap:
O(V)
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 31 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 61
ComplessitàMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
Il ciclo viene ripetuto V volte.
Extract-Min ha complessitàO(lg V).
A.A. 2001/2002 APA - Grafi 2 62
ComplessitàMST-Prim(G,w,r)
1 Q←V[G]2 for ogni u∈Q3 do key[u]←∞4 key[r]←05 π[r]←NIL6 while Q≠∅7 do u←Extract-Min(Q)8 for ogni v∈Adj[u]9 do if v∈ Q e w(u,v)<key[v]10 then π[v]←u11 key[v]←w(u,v)
Il ciclo viene ripetuto O(E) volte.
Richiede un riaggiustamento dello heap, con complessità
O(lg V).
Algoritmi e Programmazione Avanzata
05EIP
© Politecnico di Torino Pagina 32 di 32 Data ultima revisione 20/10/2003 Autore : CORNO & SONZA REORDA
Politecnico di Torino CeTeM
A.A. 2001/2002 APA - Grafi 2 63
Complessità
Il tempo di esecuzione dell'algoritmo di Prim è O(V lg V + E lg V) = O(E lg V).Usando uno heap di Fibonacci la complessità scende a O(E + V lg V).