[์๊ณ ๋ฆฌ์ฆ] MST(Minimum Spanning Tree, ์ต์ ์ ์ฅ ํธ๋ฆฌ) - Prim(ํ๋ฆผ), Kruskal(ํฌ๋ฃจ์ค์นผ) ์๊ณ ๋ฆฌ์ฆ
๋ชฉ์ฐจ
- Spanning Tree ๊ฐ๋
- MST(์ต์ ์ ์ฅ ํธ๋ฆฌ) ๊ฐ๋
- Prim's Algorithm
- Kruskal's Algorithm
Spanning Tree (์ ์ฅ ํธ๋ฆฌ)
- ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ์ ์ ๋ค์ ํฌํจํ๋ ๊ทธ๋ํ์ ๋ถ๋ถ์งํฉ(subgraph) Tree
- ์ต์ํ์ ๊ฐ์ ๋ค๋ก ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ์ ์ ์ ํฌํจ
- ๋ฐ๋ผ์ Spanning Tree๋ cycle์ ํฌํจํ์ง ์์
- ๊ทธ๋ํ ๋ด์ ์ ์ ์ ์๊ฐ n๊ฐ์ด๋ฉด, Spanning Tree๋ (n-1) ๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง - ํ ๊ทธ๋ํ ๋ด์ ์ฌ๋ฌ ๊ฐ์ Spanning Tree๊ฐ ์์ ์ ์์
MST (Minimum Spanning Tree, ์ต์ ์ ์ฅ ํธ๋ฆฌ)
- ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ(weighted graph)์์ ์ต์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง Spanning Tree
- ์ฆ, ํ ๊ทธ๋ํ ๋ด์ ์ฌ๋ฌ ๊ฐ์ Spanning Tree ์ค minimum weight์ ๊ฐ์ง Spanning Tree
- MST๋ฅผ ๊ตฌํ๋ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ Prim๊ณผ Kruskal ์๊ณ ๋ฆฌ์ฆ์ด ์์
Prim's Algorithm
ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ Tree์ ํฌํจ๋์ง ์์ ์ ์ ๋ค ๊ฐ์ด๋ฐ, ์ด๋ฏธ ํฌํจ๋ ์ ์ ๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ์ ์ ํํด์ ํด๋น ๊ฐ์ ์ ์ถ๊ฐํ๋ ๋ฐฉ์์ด๋ค.
V : ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ๋ค์ ์งํฉ
F : MST์ ํฌํจ๋ ๊ฐ์ ๋ค์ ์งํฉ
Y : MST์ ํฌํจ๋ ์ ์ ๋ค์ ์งํฉ, Y = V๊ฐ ๋๋ฉด MST๋ฅผ ๊ตฌํํ ๊ฒ
์ฒซ ๋ฒ์งธ ์ ์ ์ v1์ด๋ผ๊ณ ํ๋ฉด F = { }, Y = { v1 }์ผ๋ก ์ด๊ธฐํํด์ค๋ค. ์ด๋ ์์ง ์ ํ๋ ๊ฐ์ ์ด ์๊ณ , v1๋ถํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ค๋ ์๋ฏธ์ด๋ค.
Y=V๊ฐ ๋ ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- (V - Y)์ ์ ์ ๋ค ์ค Y์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ A๋ฅผ ์ ํํ๋ค.
- Y์ ์ ์ A๋ฅผ ์ถ๊ฐํ๋ค.
- F์ ๊ฐ์ ์ ์ถ๊ฐํ๋ค.
Y=V๊ฐ ๋์ด์ MST๊ฐ ์์ฑ๋๋ฉด F๋ MST์ ๋ชจ๋ ๊ฐ์ ์ ํฌํจํ ์งํฉ์ด ๋๋ฏ๋ก F์ ์์ ๊ฐ์๋ (n-1)๊ฐ๊ฐ ๋๋ค.
Kruskal's Algorithm
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ์ ์ ์ ํ๋์ ์์๋ก ๊ฐ๋ V์ ์๋ก์ ์งํฉ์ ๋ง๋ค์ด์ ์์ํ๋ค.
n๊ฐ์ ์ ์ ์ ๊ฐ์ง ๊ทธ๋ํ๋ผ๋ฉด ์ฒ์์ n๊ฐ์ ์๋ก์ ๋ถ๋ถ์งํฉ๋ค๋ก ์์ํ๊ณ , ์ด ์งํฉ๋ค์ ๊ฐ ์ ์ ๋ง์ ์์๋ก ๊ฐ์ง๋ค. ์ดํ ๊ฐ์ ๋ค์ ์งํฉ E๋ฅผ ๊ฐ์ค์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ์งํฉ์ด ๋จ์ ๋๊น์ง ๋ค์์ ๋ฐ๋ณตํ๋ค.
- ๊ฐ์ ๋ค์ ์งํฉ E์์ ๋ค์ ๊ฐ์ ์ ์ ํํ๋ค.
- ๋ง์ฝ ๊ฐ์ ์ด ์๋ก์ ๋ถ๋ถ์งํฉ์ ์๋ ๋ ๊ฐ์ ์ ์ ์ ์ฐ๊ฒฐํ๋ค๋ฉด
1) ๋ ์งํฉ์ ํฉ์น๋ค.
2) ๊ฐ์ ์ F์ ์ถ๊ฐํ๋ค. (F๋ MST์ ํฌํจ๋๋ ๊ฐ์ ๋ค์ ์งํฉ)
๋ชจ๋ ๋ถ๋ถ์งํฉ๋ค์ด ํฉ์ณ์ง๊ณ ๋๋ฉด F๋ MST์ ๋ชจ๋ ๊ฐ์ ์ ํฌํจํ ์งํฉ์ด ๋๋ฏ๋ก F์ ์์ ๊ฐ์๋ (n-1)๊ฐ๊ฐ ๋๋ค.
๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ์์ ํ ๋ถ๋ถ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :)