์๊ณ ๋ฆฌ์ฆ
by JiwonDevใ 2020.12.21 ์๊ณ ๋ฆฌ์ฆ ์คํฐ๋ ์์.
# ์๊ณ ๋ฆฌ์ฆ์ด ๋ญ์ฃ
* ์ต์ด๋ก ์ฌ์น์ฐ์ฐ์ ๋ง๋ ์ํ์์ ๋ผํด์ด ์ด๋ฆ(algorismus) ์์ ์ ๋๋์๋ค. ์ฐธ๊ณ ๋ก ๋ฐ์์ด๋ ํ๊ธฐ๋ ์๊ณ ๋ฆฌ๋ฌ์ด ๋ง๋ ํํ์ด๋ ํ๊ตญ์์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ง์ด ๋ถ๋ฆฐ๋ค.
์ด๋ ํ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๊ทธ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
์ฌ์ค Algorithm์ ๋ฐ๋ณต๋๋ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์์ procedure(์งํ์ ์ฐจ)๋ฅผ ์๋ฏธํ์๋ค. ์ปดํจํฐ๊ฐ ๋ฑ์ฅํ๊ธฐ ์ด์ ๋ถํฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๋จ์ด๋ ์์ฃผ ์ฌ์ฉ๋์์ผ๋ฉฐ ์ปดํจํฐ์ ๋ฑ์ฅ๊ณผ ํจ๊ป ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๊ธ์๋๋ก ๋ฐ์ ํ๊ฒ ๋์๋ค.
'์๊ณ ๋ฆฌ์ฆ'์ ์ํ์, ๊ฐ๋ฐ์๋ค๋ง ์ฐ๋ ๊ณตํ ์ฉ์ด๊ฐ ์๋๋ผ ์ฐ๋ฆฌ ์ผ์์ํ์๋ ์ฌ์ฉํ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์๋ฆฌ๋ฅผ ํ๋๋ฐ ๋ฌด์๋ถํฐ ํ๋๊ฒ ํจ์จ์ ์ผ์ง, ๊ธธ์ ์์๋๋ฐ ์ด๋ป๊ฒ ํด์ผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋์ง ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ ๊ฒ๋ ์ ๋ถ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋๋ ๊ณผ์ ์ด๋ค.
# ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ
์ด๋ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ค์์ ๋ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
๊ทธ ์ค ๊ฐ์ฅ ์ฝ๊ฒ ๊ณ์ฐ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ฌ์ฉํ๋ ์๊ฐ๊ณผ ๊ณต๊ฐ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ณต๊ฐ - ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ๋ง๋ ์ ๊ฒ ์ฐ๋๊ฐ?
- ์๊ฐ - ๊ณ์ฐ ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋๊ฐ?
์ ๋๊ฐ ๋๊ฒ ๋ค. ์ฌ์ค 2000๋ ๋ ์ ๋งํด๋ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋๋ํ์ง ์์๊ธฐ ๋๋ฌธ์ ํ๋์ฝ๋ฉ์ ํด์๋ผ๋ ๊ณต๊ฐ์ ์ด๋ป๊ฒ๋ ํ๋ณดํ๋ ์์ ์ด ์์๋ค. ์ง๊ธ์ ๋์ณ๋๋๊ฒ ๋ฉ๋ชจ๋ฆฌ์ด๊ธฐ์ ์ด๋ง์ด๋งํ๊ฒ ํฐ ๋ํ ํ๋ก๊ทธ๋จ๊ฐ ์๋๋ผ๋ฉด ๋ณดํต ๊ณต๊ฐ๋ณด๋ค๋ ์๊ฐ ํจ์จ์ ๋ ์ค์ํ๊ฒ ๋ณธ๋ค.
ํ์ง๋ง ์ปดํจํฐ๋ง๋ค, ํ๋ก๊ทธ๋จ ์คํํ๊ฒฝ์ ๋ฐ๋ผ ์คํ์๊ฐ์ ๋ค๋ฅด๊ฒ ์ธก์ ๋ ๊ฒ์ด๋ค. ๋น์ฐํ๊ฒ๋ ์ ๋ง ๋๋ฝ๊ฒ ๋๋ฆฐ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋๋ถ๋ถ์ ์ํฉ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์กด์ฌํ๋ค. ์ด๋ฅผ ์ด๋ป๊ฒ ์ธก์ ํ๊ณ ๊ตฌ๋ถํ ์ ์์๊น?
# Big-O ํ๊ธฐ๋ฒ
ํด๋น ์๋ฃ๊ตฌ์กฐ(์๊ณ ๋ฆฌ์ฆ)์ ๋๋ต์ ์ธ ์๊ฐ ์ฑ๋ฅ์ ์์๋ณด๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฝ๊ฒ ๋งํ๋ฉด ๋ณต์ก๋(=์ฑ๋ฅ)์ ‘์ฆ๊ฐ์จ’์ ๋ณธ๋ค๋ ๋ง์ด๋ค.
์๋ฃ๊ตฌ์กฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ๋ ๋๋ต์ ์ธ '์๋ํ๋ ์๊ฐ' ์ฑ๋ฅ์ ์์๋ณด๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. 3๊ฐ๊ฐ ์ฆ๊ฐํ์ ๋ 3์ด๊ฐ ๋๊ฑธ๋ฆฐ๋ค๋ฉด $O(n)$, ๊ทธ์ ์ ๊ณฑ์ธ $3^2 = 9$์ด๊ฐ ๊ฑธ๋ฆฐ๋ค๋ฉด $O(n^2)$ ์ด๋ฐ์์ผ๋ก ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฌผ๋ก f(n)+100,000 ๊ฐ์ ์ฐ์ฐ์ ํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด, ์ด๋ ๊ฒ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด ํ๋ฆฐ๊ฒ ์๋๊ฐ ์ถ์ ์ ์๊ฒ ์ง๋ง ํ๋์ ์ปดํจํฐ CPU๋ ์ด๋น ์ต๋จ์๋ก ์ฐ์ฐ์ ํ๋ค. ์ฆ ์ฐ์ฐ ํ์๊ฐ ์ด๋ง์ด๋งํ๊ฒ ํฌ๊ธฐ ๋๋ฌธ์ ์์๊ฐ(100,000)์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค. ๊ทธ๋์ ์ด๋ฆ์ด Big-O (ํฐ ์ฐจ์๋ง ๊ธฐ๋กํ๋ค๋ ์๋ฏธ)
๋ฌผ๋ก ์ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ธก์ ํ ๋๋ ๊ทธ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ , ํ๊ท , ์ต๊ณ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ์ฐ์ฐ ์ฑ๋ฅ์ ์์์ผ๋ก ํํํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ์๋ค. (ex ๋ฐ๋, ์ฒด์ค ์๊ณ ๋ฆฌ์ฆ) ํ์ง๋ง ์ง๊ธ ์์ ์์๋ ๊ทธ ์ ๋๋ก ๋ฐ์ง ํ์๋ ์์ผ๋ ๊ถ๊ธํ๋ฉด ํด๋น ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์.
## O(log n) ์ ์ด๋ป๊ฒ ๋์ค๋๊ฑฐ์ฃ ?
์ด์ง ํ์์ฒ๋ผ ์ฐ์ฐ์ 1ํ ํ ๋๋ง๋ค ์ฐ์ฐํ์๊ฐ ์ ๊ณฑ์ผ๋ก ์ค์ด๋ค๋ฉด log(n) ๋ณต์ก๋๊ฐ ๋์ค๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด 3000ํ์ด์ง๋ฅผ ๊ฐ์ง ์ฑ ์์ ๋ด๊ฐ ์ํ๋ ํ์ด์ง๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด๋ณด์.
์ฑ ์ ํผ์น ๋ ๋ง๋ค ํด๋น ํ์ด์ง์ ์์น๋ฅผ ์ ์ ์์ผ๋ฏ๋ก, ๊ณ์ํด์ ๋ฐ์ ๋๋ ์ฐพ์ผ๋ฉด ํ์ํ ๋ฒ์๊ฐ
(ํ์ด์ง ์)$ * \frac{1}{2}$ ๋งํผ ์ค์ด๋ ๋ค. ์ด๋ฅผ ์์์ผ๋ก n์ ๊ฐ์์ ๋ฐ๋ผ ์๊ฐ์ด $O(log_2 n)$์ผ๋ก ๋ณํ๊ฒ ๋๋ค.
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev