Minimum Spanning Trees - Kruskalโs Alg, Primโs Alg
๐ก Spanning Tree : ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ์ ์ ์ ํฌํจํ๋ ํธ๋ฆฌ -> n๊ฐ์ ์ ์ - (n-1)๊ฐ์ ๊ฐ์
๐ก Minimum Spanning Tree (์ต์ ์ ์ฅ ํธ๋ฆฌ): Spanning Tree ์ค์์ ์ฌ์ฉ๋ ๊ฐ์ ๋ค์ ๊ฐ์ค์น ํฉ์ด ์ต์์ธ ํธ๋ฆฌ
๐ปSpanning Tree
- DFS, BFS์ ์ด์ฉํ์ฌ ๊ทธ๋ํ์์ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ค.
- ํ์ ๋์ค์ ์ฌ์ฉ๋ ๊ฐ์ ๋ง ๋ชจ์ผ๋ฉด ๋ง๋ค ์ ์๋ค.
- ํ๋์ ๊ทธ๋ํ์๋ ๋ง์ ์ ์ฅ ํธ๋ฆฌ๊ฐ ์กด์ฌํ ์ ์๋ค.
- Spanning Tree๋ ํธ๋ฆฌ์ ํน์ํ ํํ์ด๋ฏ๋ก ๋ชจ๋ ์ ์ ๋ค์ด ์ฐ๊ฒฐ ๋์ด ์์ด์ผ ํ๊ณ ์ฌ์ดํด์ ํฌํจํด์๋ ์๋๋ค.
- ๋ฐ๋ผ์ Spanning Tree๋ ๊ทธ๋ํ์ ์๋ n๊ฐ์ ์ ์ ์ ์ ํํ (n-1)๊ฐ์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ ํ๋ค.
- ์ฌ์ฉ ์ฌ๋ก > ํต์ ๋คํธ์ํฌ ๊ตฌ์ถ(ํ์ฌ ๋ด์ ๋ชจ๋ ์ ํ๊ธฐ๋ฅผ ๊ฐ์ฅ ์ ์ ์์ ์ผ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ)
๐ปMST
- ๊ฐ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ๋์ผํ์ง ์์ ๋ ๋จ์ํ ๊ฐ์ฅ ์ ์ ๊ฐ์ ์ ์ฌ์ฉํ๋ค๊ณ ํด์ ์ต์ ๋น์ฉ์ด ์ป์ด์ง๋ ๊ฒ์ ์๋๋ค.
- MST๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ๋น์ฉ์ Spanning Tree๋ฅผ ์ ํํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ฆ, ๋คํธ์ํฌ(๊ฐ์ค์น๋ฅผ ๊ฐ์ ์ ํ ๋นํ ๊ทธ๋ํ)์ ์๋ ๋ชจ๋ ์ ์ ๋ค์ ๊ฐ์ฅ ์ ์ ์์ ๊ฐ์ ๊ณผ ๋น์ฉ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋ค.
- ํน์ง 3๊ฐ์ง
- ๊ฐ์ ์ ๊ฐ์ค์น์ ํฉ์ด ์ต์์ฌ์ผ ํ๋ค.
- n๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ ๊ทธ๋ํ์ ๋ํด ๋ฐ๋์ (n-1)๊ฐ์ ๊ฐ์ ๋ง์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ฌ์ดํด์ด ํฌํจ๋์ด์๋ ์๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก > ํต์ ๋ง, ๋๋ก๋ง, ์ ํต๋ง์์ ๊ธธ์ด, ๊ตฌ์ถ ๋น์ฉ, ์ ์ก ์๊ฐ ๋ฑ์ ์ต์๋ก ๊ตฌ์ถํ๋ ค๋ ๊ฒฝ์ฐ
๐ปMST ๊ตฌํ ์๊ณ ๋ฆฌ์ฆ (Kruskalโs Alg, Primโs Alg)
Generic MST Algorithm (๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ์ง๊ณ ์๋ ๊ณตํต์ ์ธ ํน์ง)
1) ์ฒ์์ A = ๊ณต์งํฉ ์ผ๋ก ๋๋ค.
2) ์งํฉ A์ ๋ํด์ ์์ ํ ์์ง๋ฅผ ํ๋ ์ฐพ์ ํ ์ด๊ฒ์ A์ ๋ํ๋ค. (MST์ ๊ท์น์ ์ด๊ธฐ์ง ์๋ ์์ง๋ฅผ ์ฐพ์ ํ)
3) ์์ง์ ์ (n-1)์ด ๋ ๋ ๊น์ง 2๋ฒ์ ๋ฐ๋ณตํ๋ค.
โถ๏ธ์์ ํ ์ฃ์ง ์ฐพ๊ธฐ?
- ๊ทธ๋ํ์ ์ ์ ๋ค์ ๋ ๊ฐ์ ์งํฉ S์ V-S๋ก ๋ถํ ํ ๊ฒ์ cut(S, V-S)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์์ง (u, v)์ ๋ํด์ u๊ฐ s์ ์ํ๊ณ v๊ฐ v-s์ ์ํ ๋ ์์ง (u, v)๋ ์ปท (S, V-S)๋ฅผ ํฌ๋ก์คํ๋ค๊ณ ๋งํ๋ค.
- ์์ง๋ค์ ๋ถ๋ถ์งํฉ A์ ์ํ ์ด๋ค ์์ง๋ ์ปท(S, V-S)๋ฅผ ํ์ง crossํ์ง ์์ ๋ ์ปท (S, V-S)๋ A๋ฅผ ์กด์คํ๋ค๊ณ ํ๋ค.
โ A๊ฐ MST์ ๋ถ๋ถ์งํฉ์ด๊ณ (S, V-S)๋ A๋ฅผ ์กด์คํ๋ ์ปท์ด๋ผ๊ณ ํ๋ค. ์ด ์ปท์ crossํ๋ ์์ง๋ค ์ค ๊ฐ์ค์น๊ฐ ์์ ์์ง (u, v)๋ A์ ๋ํด์ ์์ ํ๋ค.
Kruskalโs Algorithm
- ๋คํธ์ํฌ(๊ฐ์ค์น๋ฅผ๊ฐ์ ์ํ ๋นํ๊ทธ๋ํ)์ ๋ชจ๋ ์ ์ ์ ์ต์๋น์ฉ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ต์ ํด๋ต์ ๊ตฌํ๋ ๊ฒ. safe ํ๊ณ lightํ Edge๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฐพ์๊ฐ๋ ๊ธฐ๋ฒ
- ๊ฐ์ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์๊ณ ๋ฆฌ์ฆ. ๋ฌด์กฐ๊ฑด ์ต์ ๊ฐ์ ๋ง์ ์ ํ
- MST(์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ) ๊ฐ 1) ์ต์ ๋น์ฉ์ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋จ 2) ์ฌ์ดํด์ ํฌํจํ์ง ์์ ์ ์กฐ๊ฑด์ ๊ทผ๊ฑฐํ์ฌ ๊ฐ ๋จ๊ณ์์ ์ฌ์ดํด์ ์ด๋ฃจ์ง ์๋ ์ต์ ๋น์ฉ ๊ฐ์ ์ ์ ํ ํ๋ค.
- ๊ณผ์
- ๊ทธ๋ํ์ ๊ฐ์ ๋ค์ ๊ฐ์ค์น์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
-
์ ๋ ฌ๋ ๊ฐ์ ๋ฆฌ์คํธ์์ ์์๋๋ก ์ฌ์ดํด์ ํ์ฑํ์ง ์๋ ๊ฐ์ ์ ์ ํํ๋ค.
โ ์ฆ, ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น๋ฅผ ๋จผ์ ์ ํํ๋ค.
โ ์ฌ์ดํด์ ํ์ฑํ๋ ๊ฐ์ ์ ์ ์ธํ๋ค.
- ํด๋น ๊ฐ์ ์ ํ์ฌ์ MST(์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ)์ ์งํฉ์ ์ถ๊ฐํ๋ค.
- (n-1)๊ฐ์ ๊ฐ์ ๋ค์ด ์ ํ๋๋ฉด ์ข ๋ฃ
โ ๋ค์ ๊ฐ์ ์ ์ด๋ฏธ ์ ํ๋ ๊ฐ์ ๋ค์ ์งํฉ์ ์ถ๊ฐํ ๋ ์ฌ์ดํด์ ์์ฑํ๋์ง๋ฅผ ์ฒดํฌ
โ ์๋ก์ด ๊ฐ์ ์ด ์ด๋ฏธ ๋ค๋ฅธ ๊ฒฝ๋ก์ ์ํด ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ ๋ค์ ์ฐ๊ฒฐํ ๋ ์ฌ์ดํด์ด ํ์ฑ๋๋ค.
โ ์ฆ, ์ถ๊ฐํ ์๋ก์ด ๊ฐ์ ์ ์๋ ์ ์ ์ด ๊ฐ์ ์งํฉ์ ์ํด ์์ผ๋ฉด ์ฌ์ดํด์ด ํ์ฑ๋๋ค
โ Union Find Algorithm ์ฌ์ฉ
- ์๊ฐ๋ณต์ก๋
- union-find ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ฉด Kruskal ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ๊ฐ์ ๋ค์ ์ ๋ ฌํ๋ ์๊ฐ์ ์ข์ฐ๋๋ค.
- ์ฆ, ๊ฐ์ e๊ฐ๋ฅผ ํต ์ ๋ ฌ๊ณผ ๊ฐ์ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ ฌํ๋ค๋ฉด Kruskal ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(elogโe) ์ด ๋๋ค.
Primโs Algorithm
- ์์ ์ ์ ์์๋ถํฐ ์ถ๋ฐํ์ฌ ์งํฉ์ ๋จ๊ณ์ ์ผ๋ก ํ์ฅํด๋๊ฐ๋ ๋ฐฉ๋ฒ
- ์ ์ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ์ด์ ๋จ๊ณ์์ ๋ง๋ค์ด์ง ์ ์ฅํธ๋ฆฌ๋ฅผ ํ์ฅํ๋ ๋ฐฉ๋ฒ
- ๊ณผ์
- ์์ ๋จ๊ณ์์๋ ์์ ์ ์ ๋ง์ด MST(์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ) ์งํฉ์ ํฌํจ๋๋ค.
-
์ ๋จ๊ณ์์ ๋ง๋ค์ด์ง MST ์งํฉ์ ์ธ์ ํ ์ ์ ๋ค ์ค์์ ์ต์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ํํ์ฌ ํธ๋ฆฌ๋ฅผ ํ์ฅํ๋ค.
โ ์ฆ, ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น๋ฅผ ๋จผ์ ์ ํํ๋ค.
- ์์ ๊ณผ์ ์ ํธ๋ฆฌ๊ฐ (N-1)๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ์๊ฐ๋ณต์ก๋
- ์ฃผ ๋ฐ๋ณต๋ฌธ์ด ์ ์ ์ ์ n๋งํผ ๋ฐ๋ณตํ๊ณ , ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ด n๋ฒ ๋ฐ๋ณต Prim์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(n^2) ์ด ๋๋ค.
- Kruskal ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(elogโe) ์ด๋ฏ๋ก
- ๊ทธ๋ํ ๋ด์ ์ ์ ์ซ์์ ๊ฐ์ ๋ง์ ๊ฐ์ง๋ โํฌ์ ๊ทธ๋ํ(Sparse Graph)โ์ ๊ฒฝ์ฐ Kruskal ์๊ณ ๋ฆฌ์ฆ์ด ์ ํฉํ๊ณ
- ๊ทธ๋ํ์ ๊ฐ์ ์ด ๋ง์ด ์กด์ฌํ๋ โ๋ฐ์ง ๊ทธ๋ํ(Dense Graph)โ ์ ๊ฒฝ์ฐ๋ Prim ์๊ณ ๋ฆฌ์ฆ์ด ์ ํฉํ๋ค.
์ถ์ฒhttps://gmlwjd9405.github.io/2018/08/28/algorithm-mst.html