feature1.0.2 : finish Kruskal Algorithm = complete assignment5-1
Showing
1 changed file
with
14 additions
and
5 deletions
... | @@ -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 | ... | ... |
-
Please register or login to post a comment