Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26...

13
18 Minimo sottografo ricoprente Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo sottografo ricoprente è un insieme di archi E’ E tale che: G’ = (V, E’) è connesso c(E’) = e ce c(F) per ogni altro insieme di archi F E tale che H = (V, F) è connesso. 16 4 6 23 10 21 14 24 18 9 7 11 5 8 19 Minimo sottografo ricoprente Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo sottografo ricoprente è un insieme di archi E’ E tale che: G’ = (V, E’) è connesso c(E’) = e ce c(F) per ogni altro insieme di archi F E tale che H = (V, F) è connesso. 16 4 6 23 10 21 14 24 18 9 7 11 5 8 Osservazione: G’ = (V, E’) non contiene cicli, quindi è un albero 20 Minimo albero ricoprente Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo albero ricoprente è un insieme di archi E’ E tale che: G’ = (V, E’) è un albero c(E’) = e ce c(F) per ogni altro insieme di archi F E tale che H = (V, F) è un albero. 16 4 6 23 10 21 14 24 18 9 7 11 5 8 Osservazione: G’ = (V, E’) non contiene cicli, quindi è un albero MST di costo = 50 = 4 + 6 + 8 + 5 + 11 + 9 + 7 21 Minimo albero ricoprente Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo albero ricoprente è un insieme di archi E’ E tale che: G’ = (V, E’) è un albero c(E’) = e ce c(F) per ogni altro insieme di archi F E tale che H = (V, F) è un albero. 16 4 6 23 10 21 14 24 18 9 7 11 5 8 Teorema[Cayley]. Un grafo può avere fino a n n–2 alberi ricoprenti MST di costo = 50 = 4 + 6 + 8 + 5 + 11 + 9 + 7 non possiamo cercarlo esaustivamente

Transcript of Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26...

Page 1: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

18

Minimo sottografo ricoprente

Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo

sottografo ricoprente è un insieme di archi E’ ⊆ E tale che:

・ G’ = (V, E’) è connesso

・c(E’) = ∑e ce ≤ c(F) per ogni altro insieme di archi F ⊆ E tale che H = (V, F) è connesso.

16

4

6 23

10

21

14

24

189

7

115

8

19

Minimo sottografo ricoprente

Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo

sottografo ricoprente è un insieme di archi E’ ⊆ E tale che:

・ G’ = (V, E’) è connesso

・c(E’) = ∑e ce ≤ c(F) per ogni altro insieme di archi F ⊆ E tale che H = (V, F) è connesso.

16

4

6 23

10

21

14

24

189

7

115

8

Osservazione: G’ = (V, E’) non contiene cicli, quindi è un albero

20

Minimo albero ricoprente

Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo

albero ricoprente è un insieme di archi E’ ⊆ E tale che:

・ G’ = (V, E’) è un albero

・c(E’) = ∑e ce ≤ c(F) per ogni altro insieme di archi F ⊆ E tale che H = (V, F) è un albero.

16

4

6 23

10

21

14

24

189

7

115

8

Osservazione: G’ = (V, E’) non contiene cicli, quindi è un albero

MST di costo = 50 = 4 + 6 + 8 + 5 + 11 + 9 + 7

21

Minimo albero ricoprente

Dato un grafo connesso G = (V, E) con costi positivi sugli archi ce, un minimo

albero ricoprente è un insieme di archi E’ ⊆ E tale che:

・ G’ = (V, E’) è un albero

・c(E’) = ∑e ce ≤ c(F) per ogni altro insieme di archi F ⊆ E tale che H = (V, F) è un albero.

16

4

6 23

10

21

14

24

189

7

115

8

Teorema[Cayley]. Un grafo può avere fino a nn–2 alberi ricoprenti

MST di costo = 50 = 4 + 6 + 8 + 5 + 11 + 9 + 7 non possiamo cercarlo esaustivamente

Page 2: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

22

Applicazioni

MST è un problema che si ritrova in numerose applicazioni.

・design di reti (telefoniche, idrauliche, stradali)

・clustering.

・compressione dati in proteomica.

・generazione di ipotesi evolutive.

MST su 59 aplotipi di Salmonella Typhi

la lunghezza degli archi rappresenta la

differenza in numero di SNP

23

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

24

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 25

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

Page 3: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

26

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 27

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

28

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 29

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

Page 4: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

30

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 31

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

32

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 33

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

Page 5: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

34

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 35

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

36

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 37

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

Page 6: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

38

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 39

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal

40

Algoritmi greedi per MST

Diverse tecniche greedy forniscono una soluzione ottima.

Algoritmo di Prim.

・comincia con un singolo nodo arbitrario s: T = {s}

・aggiungi l’arco di costo minimo con una sola terminazione in T

Algoritmo di Kruskal

・comincia con T = ��・considera gli archi in ordine crescente di costo, aggiungi un arco a T se

non crea un ciclo

16

4

6 23

10

21

14

24

189

7

115

8

16

4

6 23

10

21

14

24

189

7

115

8

Prim Kruskal 41

Osservazioni

Cicli.

・Aggiungendo un arco e ad un albero (ricoprente) T crea un ciclo C.

・Eliminando un arco f ∈ C da T ∪ { e } otteniamo un nuovo albero

ricoprente.

Osservazione. Se ce < cf, allora T NON è un MST.

T = (V, F)

e

f

Page 7: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

42

Ottimalità dell’algoritmo di Prim

Teorema. L’algoritmo di Prim produce un MST

Dim

・sia f il primo arco scelto da Prim che non è in un MST

・S è il sottoalbero costruito da Prim che è parte di un MST

・gli archi verdi sono la restante parte di un tale MST T

・se aggiungiamo f creiamo un ciclo

・cf < ce (perché scelto da Prim) quindi T - e ∪ f ha costo inferiore a T

S

e

f

43

Algoritmo di Prim: implementazione

L’algoritmo di Prim può essere implementato in tempo O(m log n).

・quasi identica a quella dell’algoritmo di Dijkstra.

[ d(v) = minimo costo di un arco tra v e S ]

PRIM (V, E, c) _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Crea una coda a priorità S.

s ← un qualsiasi nodo di V.

FOR EACH v ≠ s : d(v) ← ∞; d(s) ← 0.

FOR EACH v : Insert (S, v, d(v)).

WHILE (S is not empty)

(u, d[u]) ← Extract-min(S).

FOR EACH arco (u, v) ∈ Adj[u]:

IF d(v) > c(u, v)

Decrease-val(S, v, c(u, v)).

d(v) ← c(u, v)._________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

44

Algoritmo di Prim - esempio

1 6

4

7 3

9

2

10

11

58 12

13

45

Algoritmo di Prim - esempio

3 11

5

0

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

Page 8: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

46

Algoritmo di Prim - esempio

3 11

5

5

3 110

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

47

Algoritmo di Prim - esempio

3

5

113 0

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

48

Algoritmo di Prim - esempio

3

5

11

7

8 12

3 0

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

49

Algoritmo di Prim - esempio

3

5

11

7

8

3 0

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

Page 9: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

50

Algoritmo di Prim - esempio

3

5

11

7

8

3

8

7 0

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

51

Algoritmo di Prim - esempio

3

5

113

8

7 0

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

52

Algoritmo di Prim - esempio

3

5

113 0

5

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

53

Algoritmo di Prim - esempio

3

5

113 0

13 2

105

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

Page 10: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

54

Algoritmo di Prim - esempio

3

5

113 0

2

105

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

55

Algoritmo di Prim - esempio

3

5

103 0

2

5

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

56

Algoritmo di Prim - esempio

3

5

103 0

2

5

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

57

Algoritmo di Prim - esempio

3

5

103 0

2

5

2

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

Page 11: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

58

Algoritmo di Prim - esempio

3

5

103 0

2

5

2

9

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

59

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

8

7

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

60

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

8

77

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

61

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

8

77

1 6

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

Page 12: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

62

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

6

77

1

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

63

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

6

77

1

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

64

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

6

77

1

1

4

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

65

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

4

77

1

1

Page 13: Minimo sottografo ricoprenteprofs.scienze.univr.it/~cicalese/ALGORITMI/2014-15/Lec10-MST.pdf · 26 Algoritmi greedi per MST Diverse tecniche greedy forniscono una soluzione ottima.

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

66

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

4

77

1

1

4

Comincia con S = un nodo qualsiasi.

Ripeti n – 1 volte:

・Aggiugi all’albero l’arco di minimo costo con un solo vertice in S.

・Aggiungi il nuovo nodo ad S.

67

Algoritmo di Prim - esempio

3

5

93 0

2

5

2

4

77

1

1

4

9

68

Algoritmo di Prim: implementazione

L’algoritmo di Prim può essere implementato in tempo O(m log n).

・quasi identica a quella dell’algoritmo di Dijkstra.

[ d(v) = minimo costo di un arco tra v e S ]

PRIM (V, E, c) _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Crea una coda a priorità S.

s ← un qualsiasi nodo di V.

FOR EACH v ≠ s : d(v) ← ∞; d(s) ← 0.

FOR EACH v : Insert (S, v, d(v)).

WHILE (S is not empty)

(u, d[u]) ← Extract-min(S).

FOR EACH arco (u, v) ∈ Adj[u]:

IF d(v) > c(u, v)

Decrease-val(S, v, c(u, v)).

d(v) ← c(u, v)._________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Running time

T(n) = O(m log n)∑u degree(u) = 2m