박권수

feature1.0.2 : finish Kruskal Algorithm = complete assignment5-1

...@@ -4,15 +4,18 @@ import numpy as np ...@@ -4,15 +4,18 @@ import numpy as np
4 parent = dict() 4 parent = dict()
5 rank = dict() 5 rank = dict()
6 6
7 +#초기화 함수이다.
7 def make_singleton_set(v) : 8 def make_singleton_set(v) :
8 parent[v] = v 9 parent[v] = v
9 rank[v] = 0 10 rank[v] = 0
10 11
12 +#해당 노드를 가지고 있는 집합을 리턴한다.
11 def find(v) : 13 def find(v) :
12 if(parent[v] != v) : 14 if(parent[v] != v) :
13 parent[v] = find(parent[v]) 15 parent[v] = find(parent[v])
14 return parent[v] 16 return parent[v]
15 17
18 +#r1, r2 집합을 합집합 연산한다.
16 def union(r1, r2) : 19 def union(r1, r2) :
17 if(r1 != r2) : 20 if(r1 != r2) :
18 if(rank[r1] > rank[r2]) : 21 if(rank[r1] > rank[r2]) :
...@@ -25,7 +28,6 @@ def union(r1, r2) : ...@@ -25,7 +28,6 @@ def union(r1, r2) :
25 def Kruskal(graph) : 28 def Kruskal(graph) :
26 #n = 정점의 수 / m = 엣지의 수 29 #n = 정점의 수 / m = 엣지의 수
27 n = len(graph['vertices']) 30 n = len(graph['vertices'])
28 - m = len(graph['edges'])
29 31
30 #엣지를 전부 찾은 후 비내림차순으로 정렬한다. 32 #엣지를 전부 찾은 후 비내림차순으로 정렬한다.
31 edge_list = list(graph['edges']) 33 edge_list = list(graph['edges'])
...@@ -35,22 +37,29 @@ def Kruskal(graph) : ...@@ -35,22 +37,29 @@ def Kruskal(graph) :
35 for v in graph['vertices'] : 37 for v in graph['vertices'] :
36 make_singleton_set(v) 38 make_singleton_set(v)
37 39
40 + #리턴할 edges 집합
38 F = set() 41 F = set()
39 42
40 index = 0 43 index = 0
41 - while len(F) <= n - 1 : 44 + while len(F) < n - 1 :
45 + #e = edges 이음선
42 e = edge_list[index] 46 e = edge_list[index]
43 47
48 + #p , q는 각각의 집합들을 가리키는 포인터이다.
44 p = find(e[1]) 49 p = find(e[1])
45 q = find(e[2]) 50 q = find(e[2])
46 51
47 - if(p == q) : 52 + #만약 p와 q가 다른 집합이면 서로를 합집합한다.
53 + if(p != q) :
48 union(p, q) 54 union(p, q)
49 F.add(e) 55 F.add(e)
50 - index += 1 56 +
57 + index += 1
51 58
52 return F 59 return F
53 60
61 +
62 +#Kruskal Algorithm
54 graph = { 63 graph = {
55 'vertices': ['A', 'B', 'C', 'D', 'E'], 64 'vertices': ['A', 'B', 'C', 'D', 'E'],
56 'edges': set([ 65 'edges': set([
...@@ -65,4 +74,4 @@ graph = { ...@@ -65,4 +74,4 @@ graph = {
65 } 74 }
66 75
67 mst = Kruskal(graph) 76 mst = Kruskal(graph)
68 -print(mst)
...\ No newline at end of file ...\ No newline at end of file
77 +print('Kruskal Algorithm : ', "\n", mst)
...\ No newline at end of file ...\ No newline at end of file
......