๐ก์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ?
- ์ฃผ์ด์ง ๊ฐ์ค์น ๊ทธ๋ํ์์ ์ด๋ ํ ์ถ๋ฐ์ ์์ ๋ ๋ค๋ฅธ ๋์ฐฉ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
๐ก์ด๋ป๊ฒ ๊ตฌํ ๊น?
- ๋ฌด์์ ๋ฐฉ๋ฒ : ๋ชจ๋ ๋์๋ค์ด ๋ค ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด ์ถ๋ฐ์ ์์ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์๋ θ(n!)
- ๋ค์ต์คํธ๋ผ ์ต๋จ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- (๊ฒฐ๊ณผ์ ์ผ๋ก) ์ถ๋ฐ์ ์์ ๊ฐ๊น์ด ๋์๋ถํฐ ์ฐจ๋ก๋๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํ์
- ํ๋ฒ ๊ฒฐ์ ๋ ์ต๋จ ๊ฒฝ๋ก๋ ์ ๋ ๋ฐ๋์ง ์์ผ๋ฉฐ ์ถ๋ฐ์ ์์ ๋ ๋จผ ๋์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ๋ ์ด์ฉ
โฐ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ
- ๋จ์ผ ์์์ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ : ์ถ๋ฐ์ง์ ์ ํ๋ ์ ํํ๋ฉด ๋๋จธ์ง ๋ค๋ฅธ ๋ชจ๋ ์ง์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ฃผ๋ ์ ํ
- ๋ชจ๋ ์ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ : ๋ชจ๋ ์ง์ ๋ค๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ฃผ๋ ์ ํ
์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ฆผ์ ์ต์ ์ ์ฅ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฑฐ์ ํก์ฌํ ๊ณผ์ ์ผ๋ก ์งํ๋๋ค.
โ๏ธํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ๊ณผ์ 2๊ฐ์ง ์ฐจ์ด์
- ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ์์์ ์ ์์ ์์ BUT ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ด์ง ์ถ๋ฐ์ ์์ ์์
- ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ํธ๋ฆฌ์ ํ๋์ ์ (์ ๋ถ)์ ์ถ๊ฐ์ํฌ๋, ํ์ฌ ์ํ์ ํธ๋ฆฌ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ์ถ๊ฐ BUT ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ถ๋ฐ์ ์ผ๋ก๋ถํฐ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋์ง ์์ ์ ๋ค ์ค์์ ์ถ๋ฐ์ ์ผ๋ก๋ถํฐ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ์ถ๊ฐํ๊ณ ๊ทธ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ ํ๋ค.
๐ก๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ (MST๋ฅผ ๊ตฌํ๋ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฆฌ๊ฐ ๊ฑฐ์ ๋์ผ)
- ์ฒ์๋ถํฐ ๋๊น์ง ํธ๋ฆฌ๋ฅผ ์ ์ง
- ์ถ๋ฐ์ ์ ์์ ํธ๋ฆฌ๋ก ์ด๊ธฐํํ๊ณ ๋งค ๋จ๊ณ์์ ํ๋์ ๋ ธ๋์ ๊ฐ์ ์ ๋ถ์ฌ๋๊ฐ
- ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ค = ๊ทธ ์ง์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํ๋ค.
- ์ฒ์์๋ ์ต๋จ ๊ฒฝ๋ก๊ฐ ํ์ ๋ ๋ ธ๋ ์งํฉ = {์ถ๋ฐ ๋ ธ๋}
- ๋งค ๋จ๊ณ๋ง๋ค ํ๋์ฉ ๋ ธ๋๋ฅผ ๋๋ ค๊ฐ๋ฉด์ ๋ชจ๋ ๋ ธ๋๋ค์ ํฌํจํ ๋ ๊น์ง ๋ฐ๋ณต
- ์์ฌ์์ด ๋ฐฉ๋ฒ์ด๋ ๋งํผ ๋
ธ๋๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ด ํต์ฌ
- ๊ธฐ์ค : ์ถ๋ฐ๋์๋ก๋ถํฐ์ ์ต๋จ ๊ฒฝ๋ก๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋
- ๋จ, ์ด๋ฏธ ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋ฐํ์ง ๋ ธ๋๋ค๋ง ๊ฒฝ์
๐ก๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ - ์ต๋จ๊ฒฝ๋ก ์ฐพ๊ธฐ
// ShortestPath(G,s)
// ์
๋ ฅ : ๊ฐ์ค์น ๊ทธ๋ํ G = (V,E), |V| = n, |E| = m
// ์ถ๋ ฅ : ์ถ๋ฐ์ s๋ก๋ถํฐ (n-1)๊ฐ์ ์ ๊น์ง ๊ฐ๊ฐ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด D
1. ๋ฐฐ์ด D๋ฅผ ๋ฌดํ๋๋ก ์ด๊ธฐํ ์ํจ๋ค. ๋จ, D[s] = 0 ์ผ๋ก ์ด๊ธฐํํ๋ค.
// ๋ฐฐ์ด D[v]์๋ ์ถ๋ฐ์ s๋ก๋ถํฐ ์ v๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ ์ฅ๋๋ค.
// ๊ฐ ์ v์ ๋ํด์ D[v]=๋ฌดํ๋๋ก ์ด๊ธฐํ
2. while(s๋ก๋ถํฐ์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋์ง ์์ ์ ์ด ์์ผ๋ฉด) {
3. ํ์ฌ๊น์ง s๋ก๋ถํฐ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋์ง ์์ ๊ฐ ์ v์ ๋ํด์ ์ต์์ D[v]์ ๊ฐ์ ๊ฐ์ง ์ v(min)์ ์ ํํ๊ณ ,
์ถ๋ฐ์ s๋ก๋ถํฐ ์ v(min)๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ D[v(min)]์ ํ์
4. s๋ก๋ถํฐ ํ์ฌ๋ณด๋ค ์งง์ ๊ฑฐ๋ฆฌ๋ก ์ v(min)์ ํตํด ์ฐํ ๊ฐ๋ฅํ ๊ฐ ์ w์ ๋ํด์ D[w]๋ฅผ ๊ฐฑ์
}
5. return D
- Line 2~4์ while ๋ฃจํ๋ (n-1)ํ ์ํ๋จ.
- ํ์ฌ๊น์ง s๋ก๋ถํฐ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋ ์ ๋ค์ ์งํฉ์ T๋ผ๊ณ ํ๋ฉด V-T๋ ํ์ฌ๊น์ง s๋ก๋ถํฐ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋์ง ์์ ์ ๋ค์ ์งํฉ.
- ๋ฐ๋ผ์, V-T์ ์ํ ๊ฐ ์ v์ ๋ํด์ D[v]๊ฐ ์ต์์ธ ์ v(min)์ ์ ํํ๊ณ , v(min)์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ ์ํจ๋ค.
- ์ฆ, D[v(min)] <= D[v], v ∈ V-T ์ด๋ค.
- 'ํ์ ํ๋ค'๋ ๊ฒ์ ๋๊ฐ์ง ์๋ฏธ
- D[v(min)]์ด ํ์ ๋ ํ์๋ ๋ค์ ๋ณํ์ง ์๋๋ค.
- ์ v(min)์ด T์ ํฌํจ๋๋ค.
๐ฅบ๊ณต๋ถ ํ์
๐ก์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ - ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋
- while ๋ฃจํ๊ฐ (n-1)๋ฒ ๋ฐ๋ณต๋๊ณ ,
- 1ํ ๋ฐ๋ณต๋ ๋ line3์์์ ์ต์ D[v]๋ฅผ ๊ฐ์ง ์ v(min)์ ์ฐพ๋๋ฐ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์๋ํ๋ฉด ๋ฐฐ์ด D์์ ์ต์๊ฐ์ ์ฐพ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ํ line 4์์๋ v(min)์ ์ฐ๊ฒฐ๋ ์ ์ ์๊ฐ ์ต๋ (n-1)๊ฐ ์ด๋ฏ๋ก, ๊ฐ D[w]๋ฅผ ๊ฐฑ์ ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(n)์ด๋ค.
- ๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ (n-1) x {O(n) + O(n)} = O(n^2)์ด๋ค.
์์ฉ
- ๋งตํ์คํธ์ ๊ตฌ๊ธ ์น์ฌ์ดํธ์ ์ง๋ ์๋น์ค
- ์๋์ฐจ ๋ค๋น๊ฒ์ด์
- ๋คํธ์ํฌ์ ํต์ ๋ถ์ผ ๋ฐ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ
- ์ฐ์ ๊ณตํ
- ๊ฒฝ์ ๊ณตํ์ ์ด์ ์ฐ๊ตฌ
- ๋ก๋ด ๊ณตํ
- ๊ตํต ๊ณตํ
- VLSI ๋์์ธ ๋ถ์ผ ๋ฑ
Reference
์์ธ๊ณผํ๊ธฐ์ ๋ํ๊ต ์ปดํจํฐ๊ณตํ๊ณผ ์๊ณ ๋ฆฌ์ฆ ์์
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์งํฉ ์ปค๋ฒ ๋ฌธ์ (Set Covering Problem) (0) | 2021.10.13 |
---|---|
[Algorithm] ๋ถ๋ถ ๋ฐฐ๋ญ ๋ฌธ์ (0) | 2021.10.13 |
[Algorithm] ์ต์ ์ ์ฅ ํธ๋ฆฌ : ํฌ๋ฃจ์ค์ปฌ & ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ (0) | 2021.10.11 |
[Algorithm] ์ต๊ทผ์ ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ (Closest Pair) (0) | 2021.10.06 |
[Algorithm] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2021.10.06 |