[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST)
Spanning Tree
Minimum Spanning Tree ๋ฅผ ์์ํ๊ธฐ ์ ์, Spanning Tree๊ฐ ๋ฌด์์ธ์ง ์ ๋ฆฌํด๋ณด์.
Spanning Tree Condition
์ ์ฅํธ๋ฆฌ
๋ผ๊ณ ๋ ํ๋ ์คํจ๋ ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํด์ผํ๋ค.
- N๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ ๊ทธ๋ํ์์ ์ต์ N-1 ๊ฐ์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
- ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ ํฌํจํ๋ค.
๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ ๊ฐ์ง๊ณ ์์ด์ผ ์ ์ฅํธ๋ฆฌ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๊ธฐ ๋๋ฌธ์, ๊ฐ์ ์ ๊ฐฏ์๋ ํญ์ N-1 ๊ฐ๊ฐ ๋ ์ ๋ฐ์ ์๊ณ , N-1๊ฐ์ ๊ฐ์ ๊ณผ N๊ฐ์ ์ ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ๋ ์ ์ฒด ๊ทธ๋ํ์ ๋ํ ์ฌ์ดํด์ด ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ํญ์ ํธ๋ฆฌ์ ํํ๊ฐ ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ DFS๋ BFS ๋ก ํ์ํ๋ฉด ๊ฐ ์ ์ ๋ค์ ์ฐ๊ฒฐํ๊ฒ ๋๋ฉด ์์ฐ์ค๋ฝ๊ฒ Spanning Tree ๊ฐ ์์ฑ์ด ๋๋ค.
Minimum Spanning Tree (MST)
์ต์ ์ ์ฅ ํธ๋ฆฌ
๋ผ๊ณ ๋ ํ๋ MST๋ ๊ทธ๋ํ ์์์ ๊ฐ์ ๋ค์ ๊ฐ์ค์น๊ฐ ์กด์ฌํ ๋, ๊ฐ์ฅ ์ ์ ๋น์ฉ์ ์ฌ์ฉํ๋ฉด์ ์ ์ฅํธ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋งํ๋ค.
์ ์ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์์ ๋, ํ์ ๋ฐฉํฅ์ ์ด๋๋ก ๋๋์ง์ ๋ฐ๋ผ์ ํ์์ ๋ง์นํ ์์ฑ๋๋ ํธ๋ฆฌ์ ๊ฐ์ค์น๊ฐ ๋ฌ๋ผ์ง๋ค. ์๋ํ๋ฉด ์ ๊ทธ๋ํ์ ์ ์ ์ ๊ฐฏ์๋ 4๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์ด์ง ๋ชจ๋ ๊ฐ์ ์ ์ฌ์ฉํ์ง ์๊ณ 3๊ฐ๋ง ์ฌ์ฉํ๋ฉด ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค๋ฉด, ์ ์ฒ๋ผ ๊ทธ๋ํ๋ฅผ ์ฐ๊ฒฐํ๋ฉด ๊ฐ์ ์ ๊ฐ์ค์น ํฉ์ด 6์ผ๋ก ์ต์ ์ ์ฅํธ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๋ค.
Algorithm Approach
์ต์ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ด ํ์ํ๋ค.
- ๊ฐ์ ์ ๋ฃ์ ์งํฉ A๋ฅผ ๋ง๋ค์.
- ์ด ์งํฉ์ Safe Edge ๋ฅผ ํ๋์ฉ ๋ฃ๋๋ค.
Safe Edge
์ฌ๊ธฐ์ Safe Edge(์์ ๊ฐ์ ) ๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ Safe Edge ์ ์ํ๊ธฐ ์ํด์ ๋ช๊ฐ์ง ๊ฐ๋ ๋ค์ ์ ๋ฆฌํด๋ณด์.
Cut(๋จ์ )
: Cut์ ํธ๋ฆฌ์ ๋ชจ๋ ์ ์ ๋ค์ ์งํฉ์ V๋ผ๊ณ ํ ๋, ์ด ์ ์ ๋ค์ ๋๊ฐ์ ์งํฉ์ผ๋ก ๋๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ทธ๋ํ๋ฅผ ์ด๋ฃจ๋ ์ ์ ์ ์งํฉ {A, B, C, D} ๋ฅผ {A, C}, {B, D} ๋ก ๋๋ ์ ์๋ค. ๋ฐ๋์ ๋ ์งํฉ์ ์ ์ ์ ์๊ฐ ๊ฐ๊ฒ ๋๋์ด์ ธ์ผํ๋ ๊ฒ์ ์๋๊ณ ์ ์ฒด ์งํฉ์์ ๋ ์งํฉ์ผ๋ก ๋๋์ด์ง๊ธฐ๋ง ํ๋ฉด ๋๋ค.
Cross (๊ต์ฐจ)
: Cross ๋ Cut ๋ฅผ ํตํด ๋๋์ด์ง ๋ ์งํฉ ์ฌ์ด์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ด ์กด์ฌํ ๋, ๋ ์งํฉ์ด ๊ต์ฐจํ๋ค๊ณ ํ ์ ์๋ค.
์ ์ฒ๋ผ ๋๋์ด์ง ๊ทธ๋ํ๊ฐ ์์ ๋, ์๋ก ๋ค๋ฅธ ์งํฉ์ ์ํ๋ A์ D๊ฐ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ AD๋ ๋ ์งํฉ์ ๊ต์ฐจํ๋ค๊ณ ๋งํ ์ ์๋ค.
Respect (๋ฐ๋ฆ)
: ์ด๋ค ์งํฉ A๊ฐ MST์ ๋ถ๋ถ์งํฉ์ด๋ผ๊ณ ํ๋ค๋ฉด, A์ ์ํ๋ ์ ์ ์ค์ cut ์ผ๋ก ๋๋์ด์ง ๋ค๋ฅธ ์งํฉ์ผ๋ก cross ํ๋ edge๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ cut์ด A๋ฅผ repect ํ๋ค๊ณ ํ๋ค. ์์์ ์ฌ์ฉํ ๊ทธ๋ฆผ์ ๋ค์ ๋ณด๋ฉด AD๋ ๋ ์งํฉ ์ฌ์ด๋ฅผ ๊ต์ฐจํ๊ธฐ ๋๋ฌธ์, ๋ง์ฝ A์ ๊ฐ์ ์งํฉ์ด MST์ ๋ถ๋ถ์งํฉ์ด๋ผ๋ฉด cut์ A๋ฅผ repect ํ์ง ์๋ ๊ฒ์ด๋ค.Light Edge (๊ฒฝ๋ ๊ฐ์ )
: cut์ cross ํ๋ ๊ฐ์ ๋ค์ด ์ฌ๋ฌ ๊ฐ ์์ ๋, ๊ทธ ์ค ๊ฐ์ค์น๊ฐ ์ต์์ธ ๊ฐ์ ์ ๋งํ๋ค.
์ ๊ฐ๋ ๋ค์ ์ฌ์ฉํด์ Safe Edge๋ฅผ ์ ์ํ๋ฉด, ์ด๋ค ๊ฐ์ ์ ์งํฉ A๊ฐ MST ์ ๋ถ๋ถ์งํฉ์ด๊ณ , cut์ ์ํด ๊ทธ๋ํ์ ์ ์ ์งํฉ V๊ฐ S ์ V-S ๋ก ๋๋์ด์ ธ ์์ ๋, ์ด cut์ด A๋ฅผ respect ํ๋ค๊ณ ํ์. ์ฆ A์ ๊ฐ์ ๋ค์ด ๋ค๋ฅธ ์งํฉ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ํ๊ฐ ์๋๋ผ๊ณ ํ ๋, ์ด๋ค light edge x-v๊ฐ ์กด์ฌํ๋ค๋ฉด, ์ด ๊ฐ์ ์ A์ ์์ ๊ฐ์ ์ด๋ผ๊ณ ํ๋ค.
์ด ๊ทธ๋ฆผ์ ํ์ธํด๋ณด์.
- ์ ์ฒด ์ ์ ์ ์งํฉ V{x, y, u, v} ๋ S{x, y}์ธ V-S{u, v}๋ก ๋๋์ด์ ธ ์๋ค.
- MST์ ๋ถ๋ถ์งํฉ์ธ A์๋ ๊ฐ์ xy๊ฐ ์ ์ฅ๋์ด ์๋ค. ๋ฐ๋ผ์ ํ์ฌ๊น์ง cut ์ A์ respect ํ๋ค.
- ์ด๋ ๊ฐ์ xv ๊ฐ ๋ฐ๊ฒฌ๋์๋ค๊ณ ํ์. ๊ฐ์ xv๋ S ์ V-S ๋ฅผ cross ํ๋ ๊ฐ์ ์ค ๊ฐ์ฅ ๊ฐ์ค์น๊ฐ ์์ ๊ฐ์ ์ธ light edge ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด ๊ฐ์ ์ Safe Edge ์ด๋ค.
๋ฐ๋ผ์ Safe Edge ๋ ๊ทธ๋ํ ์ ์ฒด ์ ์ ์ ํฌํจํ๋ ๋ ๊ฐ์ ๋ถ๋ถ ์งํฉ์ ์๋ ๊ฐ์ฅ ์์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง ๊ฐ์ ์ด๋ฏ๋ก, ๊ทธ๋ํ๋ฅผ ์๊ฐ ์ชผ๊ฐ์ด์ ๋ชจ๋ ์ ์ ์ ํฌํจํ ๋๊น์ง Safe Edge๋ฅผ ๊ตฌํด์ ์ ์ ๋ค์ ์ฐ๊ฒฐํ๋ค๋ณด๋ฉด ์ต์ ์ ์ฅ ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ค. ์ต์ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ Greedy Algorithm๊ณผ ๊ฐ๋ค.
Proof
๋ง์ ๊ฐ๋จํ๋ฐ ์ด๋ป๊ฒ ์ด๊ฒ ๊ฐ๋ฅํ ๊น? ์ฆ๋ช ์ ํด๋ณด์.
์์ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ํ์. ์งํ ํ๋์์ผ๋ก ํํ๋ ๊ฐ์ ์ ๋ชจ๋ MST์ ๋ถ๋ถ ์งํฉ์ด ๋๋ ๊ฐ์ ๋ค์ด๋ผ๊ณ ํ์. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์ ๋ฆฌํ ์ ์๋๋ก ํ์ฌ ํ์ธํ ์ ์๋ Safe Edge๋ ๊ฐ์ AE์ด๋ค. ๋ ์ ์ ์งํฉ์ ๊ต์ฐจํ๋ ๊ฐ์ฅ ์งง์ ๊ธธ์ด์ ๊ฐ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ผ ์ด์ light edge์ธ ๊ฐ์ AE๊ฐ MST์ ์ํ์ง ์๋๋ค๊ณ ํด๋ณด์.
- ๊ทธ๋ ๋ค๋ฉด ์ ์ ์งํฉ์ด ๋์ด์ง๊ฒ ๋๋๋ฐ, MST๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ชจ๋ ์ ์ ์ ๋ค ํฌํจํด์ผ ํ๋ค. ์ด์ cut์ ์ํด ๋๋์ด์ง ๋ ์งํฉ์ ์ด์ด์ค ๋ค๋ฅธ ๊ฒฝ๋ก ๋ฅผ ์ฐพ์์ผํ๋ค.
- ๊ฐ์ CF๊ฐ ์๋ก์ด cross ๊ฐ ๋์ด์ ๋ ์งํฉ์ ์ด์ ์ ๋ฐ์ ์๋ค. ์ด MST๋ฅผ ์๋ก์ด T๋ก ์ ์ํ์.
- ์ด๋ ๊ฒ ์๋ก ๋ง๋ค์ด์ง MST T๋ ๊ธฐ์กด AE๋ฅผ ์ฌ์ฉํด ๋ง๋ MST์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ์ด ๊ฐ๊ณ cross ํ๋ Edge ๋ง ๋ค๋ฅด๋ค๊ณ ํ๋ค๋ฉด, T์ ๊ฐ์ค์น ํฉ์ ํญ์ AE๋ฅผ ํฌํจํ๋ ๊ธฐ์กด์ MST๋ณด๋ค ํด ์ ๋ฐ์ ์๋ค. ์๋ํ๋ฉด AE๋ ์ฒ์์ light edge๋ก ์ ์๋์๊ณ , light weight๋ crossํ๋ ๊ฐ์ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ ๊ฐ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฐ๋ผ์ ๋ ์ ์ ์งํฉ์ cross ํ๋ edge๊ฐ light edge๋ผ๋ฉด, ์ด ๊ฐ์ ์ Safe Edge ๊ฐ ๋๊ณ MST๋ ์ธ์ ๋ ์ฑ๋ฆฝํ๋ค.
'๐ฎ ์จ-์์ค > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ(Prim's Algorithm) (0) | 2021.07.18 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ(Kruskal Algorithm) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ์๊ณ ๊ฒฝ๋ก(Critical Path) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊ฐํ ์ฐ๊ฒฐ ์์(Strongly Connected Component) (0) | 2021.07.18 |
[์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ] ๊น์ด ์ฐ์ ํ์(DFS) (0) | 2021.07.18 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote