Minimum spanning tree algorithms by ibrahim_alfayoumi

52
Minimum Spanning TREE Kruskal’s Algorithm Prim’s Algorithm BY: IBRAHIM S. ALFAYOUMI WWW.IBRAHIM.PS

Transcript of Minimum spanning tree algorithms by ibrahim_alfayoumi

Page 1: Minimum spanning tree algorithms by ibrahim_alfayoumi

Minimum Spanning TREEKruskal’s AlgorithmPrim’s AlgorithmBY: IBRAHIM S. ALFAYOUMI

WWW.IBRAHIM.PS

Page 2: Minimum spanning tree algorithms by ibrahim_alfayoumi

2What is a Spanning Tree

In order to find a spanning tree, we must make sure that every node (vertex) is some how connected to the rest of the nodes by arcs (edges)

Use the fewest number of edges possible.

Page 3: Minimum spanning tree algorithms by ibrahim_alfayoumi

3What is a Spanning Tree

In order to find a spanning tree, we must make sure that every node (vertex) is some how connected to the rest of the nodes by arcs (edge)

Use the fewest number of edges possible.

Page 4: Minimum spanning tree algorithms by ibrahim_alfayoumi

4What is a Spanning Tree

In order to find a spanning tree, we must make sure that every node (vertex) is some how connected to the rest of the nodes by arcs (edge)

Use the fewest number of edges possible.

If a loop can be found,then one of the edges is not necessary

Page 5: Minimum spanning tree algorithms by ibrahim_alfayoumi

5What is a Spanning Tree

In order to find a spanning tree, we must make sure that every node (vertex) is some how connected to the rest of the nodes by an arc (edge)

Use the fewest number of edges possible.

You may think now, How many edges you have in a spanning tree given N vertices

Page 6: Minimum spanning tree algorithms by ibrahim_alfayoumi

6Minimum Spanning Tree

The subset of edges E that connects all vertices V in the graph, and has minimum total weight.

a

b c

d

1

6

54

2

Page 7: Minimum spanning tree algorithms by ibrahim_alfayoumi

7Minimum Spanning Tree

The subset of edges E that connects all vertices V in the graph, and has minimum total weight.

a

b c

d

1

6

54

2

MST = { (a,b),(a,d),(d,c) }

Page 8: Minimum spanning tree algorithms by ibrahim_alfayoumi

Kruskal’s AlgorithmTHE PROBLEM: GIVING A GRAPH WITH WEIGHTED EDGES, FIND ITS MINIMUM SPANNING TREE

Page 9: Minimum spanning tree algorithms by ibrahim_alfayoumi

9Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

Kruskal's algorithm utilizes Disjoint Sets (DS).

Page 10: Minimum spanning tree algorithms by ibrahim_alfayoumi

10Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

Kruskal's algorithm utilizes Disjoint Sets (DS).

DS has two Operations Find and Union.

Page 11: Minimum spanning tree algorithms by ibrahim_alfayoumi

11Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

Find: takes an item and pretend that this is a DS that item belongs to

Union: will merge two DS of its input items in to one DS

Page 12: Minimum spanning tree algorithms by ibrahim_alfayoumi

12Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

A: is used to store all edges of the minimum spanning treeInitially A is emptyEventually return A

Page 13: Minimum spanning tree algorithms by ibrahim_alfayoumi

13Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

for each vertex v of the graph, make a DS with v Each vertex will be used to create a single vertex

Disjoint Set

Page 14: Minimum spanning tree algorithms by ibrahim_alfayoumi

14Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

Sort all edges by weight increasingly the edge of smallest weight will be in front and

the one with largest weight will be at the end

Page 15: Minimum spanning tree algorithms by ibrahim_alfayoumi

15Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

1st we will take the edge with the smallest weight

C and f don’t belong to the same DS

Page 16: Minimum spanning tree algorithms by ibrahim_alfayoumi

16Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),}

c and f will be merged in a one DS (c,f) is pushed to A

Page 17: Minimum spanning tree algorithms by ibrahim_alfayoumi

17Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),}

Page 18: Minimum spanning tree algorithms by ibrahim_alfayoumi

18Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),}

Page 19: Minimum spanning tree algorithms by ibrahim_alfayoumi

19Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),}

c and d will be merged in a one DS

Page 20: Minimum spanning tree algorithms by ibrahim_alfayoumi

20Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),}

c and d will be merged in a one DS

Page 21: Minimum spanning tree algorithms by ibrahim_alfayoumi

21Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),(c,d),}

Page 22: Minimum spanning tree algorithms by ibrahim_alfayoumi

22Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),(c,d),}

e and f belong to the same DS DO NOT MERGE !!

Page 23: Minimum spanning tree algorithms by ibrahim_alfayoumi

23Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),(c,d),(a,b)}

Page 24: Minimum spanning tree algorithms by ibrahim_alfayoumi

24Kruskal’s AlgorithmKruskal(V,E)A = øforeach v V:

Make-disjoint-set(v)Sort E by weight

increasinglyforeach (v1,v2) E:

if Find(v1) ≠ Find(v2):A = A U {(v1,v2)}Union (v1,v2)

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { (c,f),(a,f),(d,e),(c,d),(a,b)}

Now we have a Spanning Tree that connects all vertices which have the minimum total weight

Page 25: Minimum spanning tree algorithms by ibrahim_alfayoumi

25Kruskal’s Algorithm

Page 26: Minimum spanning tree algorithms by ibrahim_alfayoumi

26Kruskal’s Algorithm

Page 27: Minimum spanning tree algorithms by ibrahim_alfayoumi

Prim’s AlgorithmTHE PROBLEM: GIVING A GRAPH WITH WEIGHTED EDGES, FIND ITS MINIMUM SPANNING TREE

Page 28: Minimum spanning tree algorithms by ibrahim_alfayoumi

28Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

A: is used to store all edges of the minimum spanning treeInitially A is emptyEventually return A

Page 29: Minimum spanning tree algorithms by ibrahim_alfayoumi

29Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

for each vertex v of the graph, Each vertex will have two attributes KEY and PARENT

KEY and PARENT initialized to ∞ and null Respectively

Page 30: Minimum spanning tree algorithms by ibrahim_alfayoumi

30Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

a

2

cb d

f

4

63

4

15

e

2

A = { }

for each vertex v of the graph, Each vertex will have two attributes KEY and PARENT

KEY and PARENT initialized to ∞ and null Respectively

∞,null∞,null

∞,null

∞,null

∞,null

∞,null

Page 31: Minimum spanning tree algorithms by ibrahim_alfayoumi

31Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

Randomly choose a vertex as a ROOT r and set its KEY value to Zero

∞,null∞,null

∞,null

∞,null

0,null

∞,null

Page 32: Minimum spanning tree algorithms by ibrahim_alfayoumi

32Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

Create Q list which contains all vertices in the graph

∞,null∞,null

∞,null

∞,null

0,null

∞,null

Q = { a,b,c,d,e,f }

Page 33: Minimum spanning tree algorithms by ibrahim_alfayoumi

33Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

Find Q with the smallest (Minimum) KEY In this case, KEY[a] = 0 (Minimum KEY)

∞,null∞,null

∞,null

∞,null

0,null

∞,null

Q = { a,b,c,d,e,f }

Page 34: Minimum spanning tree algorithms by ibrahim_alfayoumi

34Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

Remove a from Q

∞,null∞,null

∞,null

∞,null

0,null

∞,null

Q = { b,c,d,e,f }

Page 35: Minimum spanning tree algorithms by ibrahim_alfayoumi

35Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

PARENT [a] = null !! Skip the if statement

∞,null∞,null

∞,null

∞,null

0,null

∞,null

Q = { b,c,d,e,f }

Page 36: Minimum spanning tree algorithms by ibrahim_alfayoumi

36Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

Update attributes for all vertices Adjacent to a which are b and f

Starting with f , 2 < ∞

∞,null∞,null

∞,null

∞,null

0,null

∞,null

Q = { b,c,d,e,f }

Page 37: Minimum spanning tree algorithms by ibrahim_alfayoumi

37Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { }

Update attributes for all vertices Adjacent to a which are b and f

Starting with f , 2 < ∞ PARENT [ f ] = a and KEY [ f ] = 2

∞,null∞,null

∞,null

2, a

0,null

4, a

Q = { b,c,d,e,f }

Page 38: Minimum spanning tree algorithms by ibrahim_alfayoumi

38Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f) }

Now, Enter the Second Loop a ! Q u = min(Q) = f , Remove f from Q PARENT [ f ] ! = null, push (a,f) to A

∞,null∞,null

∞,null

2, a

0,null

4, a

Q = { b,c,d,e }

Page 39: Minimum spanning tree algorithms by ibrahim_alfayoumi

39Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f) }

Update attributes for all vertices Adjacent to f which are c and d where weight < KEY

1, f∞,null

4, f

2, a

0,null

4, a

Q = { b,c,d,e }

Page 40: Minimum spanning tree algorithms by ibrahim_alfayoumi

40Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f) }

Now, Enter the NEXT Loop u = min(Q) = c , Remove c from Q PARENT [ c ] ! = null, push (c,f) to A

1, f∞,null

4, f

2, a

0,null

4, a

Q = { b,d,e }

Page 41: Minimum spanning tree algorithms by ibrahim_alfayoumi

41Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f) }

Update attributes for all vertices Adjacent to c where weight < KEY

1, f3, c

4, f

2, a

0,null

4, a

Q = { b,d,e }

Page 42: Minimum spanning tree algorithms by ibrahim_alfayoumi

42Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d) }

Enter the NEXT Loop u = min(Q) = d , Remove d from Q PARENT [ d ] ! = null, push (c,d) to A

1, f3, c

4, f

2, a

0,null

4, a

Q = { b,e }

Page 43: Minimum spanning tree algorithms by ibrahim_alfayoumi

43Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d) }

Update attributes for all vertices Adjacent to d where weight < KEY

1, f3, c

2, d

2, a

0,null

4, a

Q = { b,e }

Page 44: Minimum spanning tree algorithms by ibrahim_alfayoumi

44Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d), (d,e) }

Enter the NEXT Loop u = min(Q) = e , Remove e from Q PARENT [ e] ! = null, push (d,e) to A

1, f3, c

2, d

2, a

0,null

4, a

Q = { b }

Page 45: Minimum spanning tree algorithms by ibrahim_alfayoumi

45Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d), (d,e) }

No Updates for attributes because d and f ! Q

1, f3, c

2, d

2, a

0,null

4, a

Q = { b }

Page 46: Minimum spanning tree algorithms by ibrahim_alfayoumi

46Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d), (d,e), (a,b) }

Enter the NEXT Loop u = b , Remove b from Q PARENT [ b] ! = null, push (a,b) to A

1, f3, c

2, d

2, a

0,null

4, a

Q = { }

Page 47: Minimum spanning tree algorithms by ibrahim_alfayoumi

47Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d), (d,e), (a,b) }

No Updates for attributes because all neighbors of b doesn’t exist in Q

1, f3, c

2, d

2, a

0,null

4, a

Q = { }

Page 48: Minimum spanning tree algorithms by ibrahim_alfayoumi

48Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d), (d,e), (a,b) }

Enter the NEXT Loop, Q = ø Exit loop Return A

Q = { }

Page 49: Minimum spanning tree algorithms by ibrahim_alfayoumi

49Prim’s AlgorithmA = øforeach v V:

KEY[v] = ∞PARENT[v] = null

KEY[r] = 0Q = V While Q != ø:

u = min (Q) by KEY valueQ = Q – uif PARENT(u) != null:A = A U (u, PARENT(u))foreach v Adj(u):if v Q and w(u,v) < KEY[v]:PARENT[v] = u KEY[v] = w

Return A

3

a

2

cb d

f

4

6

4

15

e

2

A = { (a,f), (c,f), (c,d), (d,e), (a,b) }

Now we have a Spanning Tree that connects all vertices which have the minimum total weight

Q = { }

Page 50: Minimum spanning tree algorithms by ibrahim_alfayoumi

50Prim’s Algorithm

Page 51: Minimum spanning tree algorithms by ibrahim_alfayoumi

51Prim’s Algorithm The time complexity of the algorithm is computed as follows: Step 1 costs q(n) time. The for loop in Step 2 requires Ø(n) time. The time taken by steps 3 - 6 is O(n). The time taken by Step 10 to search for a vertex y closest to X is Ø(n) per

iteration. This is because the algorithm inspects each entry in the vector representing the set Y. Since it is executed n-1 times, the overall time required by Step 10 is Ø(n2).

Steps 11,12 and 13 cost Ø(1) time per iteration for a total of q(n) time. The for loop in Step 14 is executed 2m times, where m=|E|. This is because

each edge (y, w) is inspected twice: once when y is moved to X and the other when w is moved to X.

Hence, the overall time required by step 14 is Ø(m). The test in Step 15 is executed exactly m times, and Steps 16 and 17 are

executed at most m times. Thus, Steps 14 to 19 cost q(m) time. It follows that the time complexity of the algorithm is Ø(m + n2) = Ø (n2)

Page 52: Minimum spanning tree algorithms by ibrahim_alfayoumi

THANKS