์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 25
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ํฌ๋ฃจ์ค์นผ - 2
- ํ๋ฆผ - 1
union-by-rank์ path-compression์ด ๊ตฌํ๋ Union/Find(์ค๋น)
from string import ascii_uppercase
parentOf = {v : v for v in ascii_uppercase[:6]}
rank = {v : 0 for v in ascii_uppercase[:6]}
def Find(node):
if parentOf[node] != node:
# path-compression
parentOf[node] = Find(parentOf[node])
return parentOf[node]
def Union (n1, n2):
p1 = Find(n1)
p2 = Find(n2)
# union-by-rank ๊ตฌํ
if rank[p1] < rank[p2]:
parentOf[p1] = p2
elif rank[p1] > rank[p2]:
parentOf[p2] = p1
else:
rank[p1] += 1
parentOf[p2] = p1
์ด์ ์ด ํจ์๋ฅผ ์ด์ฉํด์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ฒ ๋ค.
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฒ์ ์ค๋ช ํ์ง๋ง, ํ๋ฒ ๋ ์ง๊ณ ๊ฐ๊ฒ ๋ค.
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ ๋ฆฝ์ ์ธ ์งํฉ์ผ๋ก ๋ง๋ ๋ค.
- ๋ชจ๋ ๊ฐ์ ์ ๋น์ฉ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ, ๋น์ฉ์ด ์์ ๊ฐ์ ์ ์ ํํ๋ค.
- ์ ํํ ๊ฐ์ ์ ์ฐ๊ฒฐ๋ ๋ ๋
ธ๋๊ฐ ์ํ ์งํฉ์ด ๋ค๋ฅด๋ค๋ฉด(Find), ๋ ๋
ธ๋์ ์งํฉ์ ํฉ์น๊ณ (Union),
๊ฐ์ ์ ํธ๋ฆฌ์ ์ถ๊ฐํ๋ค. - ๋ชจ๋ ๊ฐ์ ์ ๋ํด 2๋ฒ๊ณผ 3๋ฒ์ ๋ฐ๋ณตํ๋ค.
์ด๋ ๊ฒ ํด์ ์์ฑ๋ ํธ๋ฆฌ๋ mst๊ฐ ๋๋ค.
parentOf = {}
rank = {}
def Find(node):
# ์ ์ฝ๋์ ๊ฐ์
def Union (n1, n2):
# ์ ์ฝ๋์ ๊ฐ์
def Kruskal(graph):
global parentOf, rank
tree = []
for node in graph['vertices']:
parentOf = { v : v for v in graph['vertices'] }
rank = { v : 0 for v in graph['vertices']}
graph['edges'].sort()
for edge in graph['edges']:
if Find(edge[1]) != Find(edge[2]):
Union(edge[1], edge[2])
tree += [edge]
return tree
mygraph = {
'vertices': ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
'edges': [
(7, 'A', 'B'),
(5, 'A', 'D'),
(7, 'B', 'A'),
(8, 'B', 'C'),
(9, 'B', 'D'),
(7, 'B', 'E'),
(8, 'C', 'B'),
(5, 'C', 'E'),
(5, 'D', 'A'),
(9, 'D', 'B'),
(7, 'D', 'E'),
(6, 'D', 'F'),
(7, 'E', 'B'),
(5, 'E', 'C'),
(7, 'E', 'D'),
(8, 'E', 'F'),
(9, 'E', 'G'),
(6, 'F', 'D'),
(8, 'F', 'E'),
(11, 'F', 'G'),
(9, 'G', 'E'),
(11, 'G', 'F')
]
}
Kruskal(mygraph)
์์์ ์ค๋ช ํ๋๋ก ๊ตฌํํ๋ค.
๊ฐ์ ๋ค์ ์ ๋ ฌํ๊ณ , ๋ชจ๋ ๊ฐ์ ๋ค์ ํ์ํ๋ฉด์,
๋ค๋ฅธ ์งํฉ์ผ ๊ฒฝ์ฐ ๋ ์งํฉ์ ํฉ์น๊ณ , ํธ๋ฆฌ์ ์ถ๊ฐ
ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ
์์ ์ ์ ์ ์ ํํ๊ณ , ํด๋น ์ ์ ์ ํฌํจํ๋ ์ต์ ์ ์ฅํธ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค.
์ง๊ธ๊น์ง ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ค ์ค ์ต์๋น์ฉ์ ์ ํํ์ฌ ํ์ฅํด๋๊ฐ๋ ๋ฐฉ์.
=> ์ด๊ฒ ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ
ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช
- ์์ ๋ ธ๋๋ฅผ ์ ํ
- ์ ํ๋ ๋ ธ๋๋ฅผ โ์ฐ๊ฒฐ๋ ๋ ธ๋ ์งํฉโ์ ๋ฃ์
- ์ ํํ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ค์ โ๊ฐ์ ๋ฆฌ์คํธโ์ ๋ฃ์
- โ๊ฐ์ ๋ฆฌ์คํธโ์์ ์ต์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง ๊ฐ์ ์ ์ ํ
- ์ ํํ ๊ฐ์ ์ ์ธ์ ๋
ธ๋๊ฐ โ์ฐ๊ฒฐ๋ ๋
ธ๋ ์งํฉโ์ ์ํ์ง ์๋๋ค๋ฉด ํด๋น ๊ฐ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ฅผ ํธ๋ฆฌ์ ์ถ๊ฐ,
ํด๋น ๋ ธ๋๋ฅผ โ์ฐ๊ฒฐ๋ ๋ ธ๋ ์งํฉโ์ ์ถ๊ฐ, ํด๋น ๋ ธ๋์ ๊ฐ์ ๋ค์ โ๊ฐ์ ๋ฆฌ์คํธโ์ ์ถ๊ฐ - ์ ํํ ๊ฐ์ ์ โ๊ฐ์ ๋ฆฌ์คํธโ์์ ์ ๊ฑฐ
- โ๊ฐ์ ๋ฆฌ์คํธโ์ ๊ฐ์ ์ด ์์ ๋๊น์ง 4๋ฒ์์ 6๋ฒ ๋ฐ๋ณต
๋ค์ ์ฌ์ง์ ์์ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ธ ์์.
๋ง์ง๋ง
์ค๋ 11์๋ถํฐ ์์ฑํ๋๋ผ 12์์ ์ ์์ฑํ๊ธฐ ๋น ๋ฏํ๋ค.ใ ใ
๋๊ธ๋จ๊ธฐ๊ธฐ