[์๊ณ ๋ฆฌ์ฆ] ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณ์ ๋ถ์ - ์๊ฐ ๋ณต์ก๋์ ์ ๊ทผ์ฑ๋ฅ
1. ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ
์ฃผ์ด์ง ๋ฌธ์ , ์์ฑ, ์กฐ๊ฑด ๋ฑ์ ๋ฐ๋ผ ๋งค์ฐ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ ์ ์๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ด๊ณ ๋ฒ์ฉ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ์ ์กด์ฌํ์ง ์์ง๋ง ๊ทธ ์ค ๋ํ์ ์ธ ์ค๊ณ ๊ธฐ๋ฒ ์ธ ๊ฐ์ง๋ฅผ ๊ผฝ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ถํ ์ ๋ณต ๋ฐฉ๋ฒ(Divide-and-Conquer)
- ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ(Dynamic Programming)
- ์์ฌ์์ด ๋ฐฉ๋ฒ(Greedy)
๋ฐ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๋ฉฐ ์ ์ธ ๊ฐ์ง ์ค๊ณ ๊ธฐ๋ฒ์ ๊ผญ ์์๋ฌ์ผ ํ ๊ฒ์ด๋ค.
2. ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ ๋ถ์
์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ ๋ถ์์ ์๊ณ ๋ฆฌ์ฆ ์ํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ์๊ณผ ์ํ ์๊ฐ์ ๊ณ์ฐํ๋ ๊ฒ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ → ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity) = ์ ์ ๊ณต๊ฐ + ๋์ ๊ณต๊ฐ
- ์ํ ์๊ฐ → ์๊ฐ ๋ณต์ก๋(Time Complexity)
3. ์๊ฐ ๋ณต์ก๋
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋์๋ ์ ๋ ฅ ํฌ๊ธฐ(์ ๋ ฅ ๋ฐ์ดํฐ ํฌ๊ธฐ)์ ์ ๋ ฅ ๋ฐ์ดํฐ ์ํ(์ ๋ ฌ ์ฌ๋ถ ๋ฑ) ์ด ์ํฅ์ ๋ฏธ์น๋ค.
์๊ฐ ๋ณต์ก๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ์ ์ํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ n์ ํจ์๋ก ํํํ๋ค.
๋ค์ ์๋ฅผ ๋ณด์. ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฉ๊ณ์ ํ๊ท ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋จผ์ ์ ๋ ฅ ํฌ๊ธฐ๊ฐ n์ผ ๋ ๊ฐ ์ฐ์ฐ์ ํ์๋ฅผ ๊ตฌํ๋ค. (1, 1, n+1, n, n, 1, 1)
์ฐ์ฐ ํ์๋ฅผ ๋ชจ๋ ๋ํ๋ฉด f(n) = 3n+5์ด๋ฉฐ ์ ๊ทผ ์ฑ๋ฅ์ big-oh ํ๊ธฐ๋ฒ์ผ๋ก O(n)์ผ๋ก ํ๊ธฐํ ์ ์๋ค.
4. ์ ๊ทผ์ฑ๋ฅ์ ํ๊ธฐ๋ฒ
์ ๊ทผ์ฑ๋ฅ์ ์ ๋ ฅ ํฌ๊ธฐ n์ด ๋ฌดํ๋๋ก ์ปค์ง์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ ์ฑ๋ฅ์ด๋ค.
์ํ ์๊ฐ์ ๋คํญ์ ํจ์์์ ์ต๊ณ ์ฐจํญ๋ง์ ๊ณ์ ์์ด ์ทจํด์ ํํํ๋ค.
์ ๊ทผ์ฑ๋ฅ์ ์ํ ์๊ฐ์ ์ด๋ฆผ๊ฐ์ด๊ณ ์ํ ์๊ฐ์ ์ฆ๊ฐ ์ถ์ธ ํ์ ์ด ์ฉ์ดํ๋ฉฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ด์ ๊ตฌํ ์ ์๋ค.
์ ๊ทผ์ฑ๋ฅ์ ํ๊ธฐ๋ฒ์ ํฌ๊ฒ big-oh, big-omega, big-theta ์ธ ๊ฐ์ง๊ฐ ์๋ค.
(1) Big-Oh - ์ ๊ทผ์ ์ํ
์์ ์์ c์ n0๊ฐ ์กด์ฌํ์ฌ ๋ชจ๋ n≥n0์ ๋ํด f(n)≤c·g(n)์ด๋ฉด f(n)=O(g(n))์ด๋ค.
์ฝ๊ฒ ๋งํด ์ ๋ ฅ ํฌ๊ธฐ๊ฐ n0๋ฅผ ๋์ด์๋ฉด f(n)์ ํญ์ c·g(n)๋ณด๋ค ์ํ์๊ฐ์ด ์๋ค๋ ์๋ฏธ์ด๊ณ O(g(n))์ f(n)์ ์ต์ ์ ์ํ์๊ฐ์ด๋ค.
(2) Big-Omega - ์ ๊ทผ์ ํํ
์์ ์์ c์ n0๊ฐ ์กด์ฌํ์ฌ ๋ชจ๋ n≥n0์ ๋ํด f(n)≥c·g(n)์ด๋ฉด f(n)=Ω(g(n))์ด๋ค.
์ฝ๊ฒ ๋งํด ์ ๋ ฅ ํฌ๊ธฐ๊ฐ n0๋ฅผ ๋์ด์๋ฉด f(n)์ ํญ์ c·g(n)๋ณด๋ค ์ํ์๊ฐ์ด ํฌ๋ค๋ ์๋ฏธ์ด๊ณ Ω(g(n))์ f(n)์ ์ต์ ์ ์ํ์๊ฐ์ด๋ค.
(3) Big-Theta - ์ ๊ทผ์ ์ํํ
์์ ์์ c1, c2์ n0๊ฐ ์กด์ฌํ์ฌ ๋ชจ๋ n≥n0์ ๋ํด c1·g(n)≤f(n)≤c2·g(n)์ด๋ฉด f(n)=Θ(g(n))์ด๋ค.
Big-theta๋ ์๊ณ ๋ฆฌ์ฆ์ ์ํ์๊ฐ์ ๋ ์๋ฐํ๊ฒ ํํํ๋ ํ๊ธฐ๋ฒ์ด๋ค.
๋ค์์ f(n)๊ณผ g(n)์ด ์ฃผ์ด์ก์๋ f(n)์ ์ธ ๊ฐ์ง ์ ๊ทผ์ ํ๊ธฐ๋ฒ์ผ๋ก ํํํ ๊ฒ์ด๋ค.
(4) ์ฃผ์ O-ํ๊ธฐ ๊ฐ์ ์ฐ์ฐ ์๊ฐ์ ํฌ๊ธฐ ๊ด๊ณ
5. ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ตฌํ๋ ์ค์ฉ์ ์ธ ์ ๊ทผ ๋ฐฉ๋ฒ
์ง๊ธ๊น์ง ๋ค๋ฃฌ ๋ด์ฉ์ ์ํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ์ํ ์๊ฐ f(n)์ ๊ตฌํ ํ f(n)=O(g(n))์ ๋ง์กฑํ๋ ์ต์ ์ฐจ์์ ํจ์ g(n)์ ์ฐพ์์ผ ํ์ง๋ง ์ค์ฉ์ ์ธ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฃจํ ๋ฐ๋ณต ํ์๋ง ์กฐ์ฌํด์ ์๊ฐ ๋ณต์ก๋๋ก ์ทจํ๊ณ g(n)์ ์ต๊ณ ์ฐจ์์ ์์กดํ๋ ๊ฒ์ด๋ค.
์ข์ธก ์๊ณ ๋ฆฌ์ฆ์ while๋ฌธ์ด n๋ฒ ๋ฐ๋ณต๋๋ฏ๋ก O(n), ์ฐ์ธก ์๊ณ ๋ฆฌ์ฆ์ for๋ฌธ์ด n๋ฒ, ๊ทธ ์์์ ๋ค์ n๋ฒ ๋ฐ๋ณต๋๋ฏ๋ก n*n = n^2 = O(n^2)์ด๋ค.
6. ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ - ์ ํ์๊ณผ ํ์ํ
์๊ธฐ ์์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ ์ํํ๋ ํํ์ ์ํ(Recursion, ์ฌ๊ท) ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ง๊ธ๊น์ง์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ ์ ์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ ํ์์ ์ ๋ํ๊ณ ์ ํ์์ ํ์ํ์ ๊ตฌํด์ ๊ณ์ฐํ๋ค.
๋งค๋ฒ ์ ํ์์ ์ ๋ํ๊ณ ํ์ํ์ ๊ตฌํ๊ธฐ ๋ณด๋ค๋ ๊ธฐ๋ณธ ์ ํ์๊ณผ ํ์ํ์ด ์กด์ฌํ๋ฏ๋ก ์ด๋ฅผ ์๊ธฐํ๋๊ฒ ๋ซ๋ค.
ํนํ (2), (3), (6)์ ๊ฐ๊ฐ ํต ์ ๋ ฌ, ์ด์ง ํ์, ํฉ๋ณ ์ ๋ ฌ์ ์ํ ์๊ฐ์ด๋ฏ๋ก ํ์์ ์ผ๋ก ์๊ธฐํ์. ๋๋จธ์ง (1), (4), (5)๋ ๋ชจ๋ Θ(n)์ด๋ฏ๋ก ์๊ธฐํ๊ธฐ ์ฝ๋ค.
References
ํ๊ตญ๋ฐฉ์กํต์ ๋ํ๊ต ์ปดํจํฐ๊ณผํ๊ณผ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
๋๊ธ