๐ง ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ ์์ ์กด์ฌํ๋ ๋ชจ๋ ์ ์ ์ ๋ํ์ฌ,
๊ฐ ์ ์ ๊ฐ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก,
๊ธฐ๋ณธ ์์ด๋์ด๋ ๊ฑฐ์ณ๊ฐ๋ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ ๋๋ค.
V = { 1, 2, ..., n } ์ผ๋ก ๋๊ณ , G์ ์์์ ๋ ์ ์ i, j์ ๋ํ์ฌ dist(i, j, k)๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.
์ ์ (1, 2, ..., k) ๋ง์ path์ ์ค๊ฐ ์ ์ (intermediate vertex)์ผ๋ก ํฌํจ์ํฌ ์ ์์ ๋, i ์์ j๋ก์ ์ต๋จ ๊ฒฝ๋ก์ ๊ธธ์ด
๐ง Recurrence Relation
Base Case( k = 0 )
dist (i, j, 0) = 0 : i = j ์ธ ๊ฒฝ์ฐ
dist (i, j, 0) = w(i, j) : ๊ฐ์ (i, j)๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
dist (i, j, 0) = '๋ฌดํ๋' : ๊ฐ์ (i, j)๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
Inductive Step
dist (i, j, k) ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง path๋ฅผ ๋ ๊ฐ์ง case๋ก ๋๋์ด ๋ณด๋ฉด,
Case 1 : ์ ์ k๋ฅผ ์ง๋์น์ง ์๋ ๊ฒฝ์ฐ, ์ฆ ์ ์ k๋ฅผ ์ค๊ฐ ๊ฑฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ผ๋ (1, ..., k-1)์ ์ค๊ฐ ๊ฑฐ์ ์ผ๋ก ์ฌ์ฉํ์ ๋์ ๋น๊ตํด์ ์ต๋จ๊ฒฝ๋ก๊ฐ ์ค์ด๋ค์ง ์์ ๋
์ด ๊ฒฝ์ฐ dist(i, j, k) =dist(i, j, k-1)
Case 2 : ์ ์ k๋ฅผ ์ง๋๊ฐ๋ ๊ฒฝ์ฐ, ์ฆ ์ ์ k๋ฅผ ์ค๊ฐ ๊ฑฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉด, (1, ..., k-1)์ ์ค๊ฐ ๊ฑฐ์ ์ผ๋ก ์ฌ์ฉํ์ ๋์ ๋น๊ตํด์ ์ต๋จ๊ฒฝ๋ก๊ฐ ์ค์ด๋ค ๋
์ด ๊ฒฝ์ฐ dist(i, j, k) = dist(i, k, k-1) + dist(k, j, k-1)
Case 2 ์ ๊ฒฝ์ฐ ์ค๊ฐ ์ง์ ์ผ๋ก k๋ฅผ ๊ฑฐ์น๋ค๋ฉด, i์์ k๋ก์ path์ k์์ j๋ก์ path๋ ์ค๊ฐ ์ง์ ์ผ๋ก k๋ฅผ ํฌํจํด์๋ ์๋ฉ๋๋ค.
๋ง์ฝ ์ค๊ฐ ์ง์ ์ผ๋ก k๋ฅผ ํฌํจํ๋ค๋ฉด k๋ฅผ ๋ ๋ฒ ๊ฑฐ์น๊ฒ ๋๊ณ , ์ด๊ฒ์ด ์ต๋จ๊ฒฝ๋ก๊ฐ ๋๋ ๊ฒฝ์ฐ ์ด๋ negative cycle์ด ํฌํจ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. (k -> ... -> k ๋ฅผ ํ์ ๋ ๋น์ฉ์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ)
์ฆ ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ Recurrence Relation์ด ๋์ถ๋ฉ๋๋ค.
dist(i, j, k) = min( ( dist(i, k, k-1) + dist(k, j, k-1)) , dist(i, j, k-1) )
๐ง ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ณต๋ฌธ์ ์ค์ฌ์ ๊ฑฐ์ณ๊ฐ๋ ์ ์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
์ฆ ์ฒซ๋ฒ์งธ ๋ฐ๋ณต์์๋ 1๋ฒ ์ ์ ์ ๊ฑฐ์ณ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ, n๋ฒ์งธ ๋ฐ๋ณต์์๋ n๋ฒ ์ ์ ์ ๊ฑฐ์ณ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ํ์ธํฉ๋๋ค.
1. ์ด n๋ฒ์ ๋ฐ๋ณต์ด ์งํ๋๋ฉฐ, k ๋ฒ์งธ ๋ฐ๋ณต์ด ๋๋ ๋๋ง๋ค G์ ๋ชจ๋ ์ ์ i, j์ ๋ํ์ฌ dist(i, j, k)๊ฐ dist(i, j)์ ์ ์ฅ๋ฉ๋๋ค.
2. ์์ํ ๋์๋ ์์ base case์ ๋ง๊ฒ dist ๊ฐ์ ์ ํด์ค๋๋ค.
3. ์ดํ k๋ฒ์งธ ๋ฐ๋ณต๋ง๋ค ๋ชจ๋ ์ ์ i, j ์ ๋ํ์ฌ ๋ค์ ์์ ์ ๋ฐ๋ณตํฉ๋๋ค.
dist(i, k, k-1) + dist(k, j, k-1) < dist(i, j, k-1) ์ธ ๊ฒฝ์ฐ, ์ฆ k๋ฅผ ๊ฑฐ์ณ๊ฐ๋ฉด ์ต๋จ ๊ฒฝ๋ก๊ฐ ์ค์ด๋๋ ๊ฒฝ์ฐ,
dist(i, j)๋ฅผ dist(i, k, k-1) + dist(k, j, k-1)๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
(์ ๋ฐ์ดํธ๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ์๋ k๋ฒ์งธ ๋ฐ๋ณต์ด ๋๋๋ฉด dist(i, j, k)๊ฐ ์๋์ผ๋ก dist(i, j, k-1)์ด ๋ฉ๋๋ค.)
๐ง ์์
2๋ฒ์งธ ์คํ ์ด์ง์ ๊ฒฝ์ฐ, ์ค๊ฐ ์ ์ ์ 2์ ๋๋ค.
(3 -> 1) ๊ฒฝ๋ก๋ฅผ ํ์ธํด ๋ณด๋ฉด, ๊ธฐ์กด ๊ฐ๋ณด๋ค (3 -> 2) + (2 -> 1) = 1 + 2 = 3 ์ ๋๋ค.
์ฆ 2๋ฒ์งธ ์คํ ์ด์ง์์ 3 -> 1 ๊ฒฝ๋ก๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉฐ, ๋๋จธ์ง๋ ๋น์ทํ๊ฒ ์งํ๋ฉ๋๋ค.
๐ง ์๋์ฝ๋
๐ง ์๊ฐ ๋ณต์ก๋
์ด n+1๋ฒ ๋ฐ๋ณตํ๋ฉฐ : $O(n)$
๊ฐ ๋ฐ๋ณต๋ง๋ค ๋ชจ๋ i, j ์ ๋ํด์ dist(i, j)๋ฅผ ์ ๋ฐ์ดํธ : $O(n^2)$
๋ฐ๋ผ์ $O(n^3)$
'๐ฅ Computer Science > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Counting Sort (๊ณ์ ์ ๋ ฌ) (0) | 2022.12.05 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] Adversary Argument (2) | 2022.12.05 |
[์๊ณ ๋ฆฌ์ฆ] DP (3) - ๋ฒจ๋งํฌ๋(Bellman-Ford) ์๊ณ ๋ฆฌ์ฆ (0) | 2022.11.12 |
[์๊ณ ๋ฆฌ์ฆ] DP (2) - Edit Distance(ํธ์ง ๊ฑฐ๋ฆฌ) (0) | 2022.11.12 |
[์๊ณ ๋ฆฌ์ฆ] DP (1) - LIS(์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด) (0) | 2022.11.10 |