Kruskal's MST Algorithm
์ ์ฅํธ๋ฆฌ(Spanning Tree)๋ ๋ชจ๋ vertex๊ฐ edge๋ก ์ฐ๊ฒฐํ๋ฉด์ edge ์ฌ์ด์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ์ด๋ค. vertex์๋ edge์ + 1์ด ๋๋ค. ๋ชจ๋ vertex๊ฐ ๋ค ์ฐ๊ฒฐ์ ๋์ด ์์ง๋ง, ์ผ๋ถ edge๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ ์ ์ ํ์ฉํด ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์๋ฅผ ๋ค์ด์ ์ต์ ๋น์ฉ์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ด๊ฒ์ ์ต์ ์ ์ฅ ํธ๋ฆฌ(Minimum Spanning Tree)๋ผ ํ๋ค.
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
๋ํ์ ์ ํ์์ ๋ฐฉ๋ฒ์ผ๋ก ์ต์ ์ ์ฅ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋์ ๊ณผ์ ์ ๋จผ์ ๋ถ๋ชจํ ์ด๋ธ์ ๋ง๋ค์ด ์๊ธฐ ์์ ์ผ๋ก ๋ถ๋ชจ๋ก ์ด๊ธฐํํ๊ณ , ๊ฐ์ ์ ๋น์ฉ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ (sorted), ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ ๋ ๊น์ง (for i in range(V)), ๊ฐ์ ์ ์์๋ฐ๋ก ํ์ธํ๋ฉด์ ์ฌ์ดํด์ด ๋ฐ์ํ๋์ง ํ์ธํ๊ณ (exist_cycle), ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ๋ง ๋ถ๋ชจํ ์ด๋ธ์ ์ ๋ฐ์ดํธํ์ฌ ํธ๋ฆฌ์ ํฌํจ์ํค๊ณ (union) ์ด ๊ณผ์ ์ ๋ฐ๋ณต ์ํํ๋ค.

๊ฐ์ ์ ๋น์ฉ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
cost
4
5
6
10
15
๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ ๋ ๊น์ง (for i in range(V)), ๊ฐ์ ์ ์์๋ฐ๋ก ํ์ธํ๋ฉด์ ์ฌ์ดํด์ด ๋ฐ์ํ๋์ง ํ์ธํ๊ณ (exist_cycle), ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ๋ง ํธ๋ฆฌ์ ํฌํจ์ํค๊ณ (union) ์ด ๊ณผ์ ์ ๋ฐ๋ณต ์ํํ๋ค.
step 0
p[n]
0
1
2
3
step 1
p[n]
0
1
2
2
step 2
p[n]
0
1
0
2
step 3
p[n]
0
1
0
2
step 4
p[n]
0
0
0
2
์ฝ๋
์ฐธ๊ณ ์๋ฃ
https://velog.io/@ming/MST์ต์-์ ์ฅํธ๋ฆฌ-์๊ณ ๋ฆฌ์ฆ https://www.geeksforgeeks.org/kruskals-minimum-spanning-tree-algorithm-greedy-algo-2/ https://github.com/chaminhye/Algorithm/blob/master/src/concept/graph/Kruskal.java https://deep-learning-study.tistory.com/592
Last updated
Was this helpful?