๋ณต์ก๋ ๋ถ์์ด๋? ์๊ณ ๋ฆฌ์ฆ์ ํธ๋ ๋ฐ ์์ด์ ์๊ฐ๊ณผ ๊ณต๊ฐ์ ์ผ๋ง๋ ์ฐจ์งํ๋์ง๋ฅผ ๋ํ๋ด๋ ์งํ. ์ด๋ ๊ณง ํด๋น ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ํจ์จ์ ์ธ๊ฐ๋ฅผ ๋ํ๋ธ๋ค.
Big O notation is a mathematical notation that describes the limiting behavior of a function when the argument tends towards a particular value or infinity.
Big-O๋ง๋ค ์ด๋ฆ์ด ๋ค ์์ ๊ทธ๋ํ์ ๊ฒฝ์ฌ๊ฐ ๊ธ๊ฒฉํ ์๋ก ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ด ์์ฃผ ๋ณ๋ก์ธ ๊ฒ์
1) O(1): constant time
2) O(log n): logarithmic time
3) O(n): linear time
4) O(n log n): log linear time
5) O(n^2): quadratic time
6) O(n^3): cubic time
7) O(c^n): exponential time
8) O(n^c): polynomial time
๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋๋ธ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฐจ์ด๋ ๋ฆฌ๋ฌด๋ธ์ ์์. ๋๋ธ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์ง์ ์ ๋ ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ธ๋ ์ญ์ ์ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์. ๊ทธ๋ฌ๋ ๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์ง์ ๋ ธ๋์ ๋ํ ์ ๋ณด๊ฐ ์์ด์, ์์์ ๋ถํฐ ์กฐํํด์์ผ ํจ. ๊ทธ๋์ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด ๋์ด๋ฒ๋ฆผ. ๋ฌผ๋ก ์๊ฐ๋ณต์ก๋๋ ๋๋ธ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ๋ ๋ฎ?์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ๋ ์ก์๋จน์... ์ ๋ค ๋ ธ๋ ๋ค ์ ์ฅํ๋๊น...
constant O(1) ์์
: ๋ฐฐ์ด์์ n๋ฒ์งธ ์์ ์ฐพ๊ธฐ, ๋ฐฐ์ด์์ n๋ฒ์งธ์ ์ด์ธ์ธ, ํด์ฌํ
์ด๋ธ ์ถ๊ฐ, ๋งํฌ๋๋ฆฌ์คํธ(insert / ์ด๋์ ์ถ๊ฐํ ์ง ์๋ค๊ณ ๊ฐ์ ํ ๋), ๋งํฌ๋๋ฆฌ์คํธ ํค๋๋ฆฌ๋ฌด๋ธ
logarithmic O(log n) ์์
: ๋ฐ์ด๋๋ฆฌ์์นํธ๋ฆฌ์์ ์์นํ ๋ (๋ฐธ๋ฐ์ค๊ฐ ์๋ง๋ ์์คํธ ์ผ์ด์ค(์๋ ์ด๋ฏธ์ง)์ ๊ฒฝ์ฐ ์ด๊ฑฐ ๋ฆฌ๋์ด์)
linear O(n) ์์
: ๋งํฌ๋๋ฆฌ์คํธ(Lookup, find, assign), ๋ฐฐ์ด ์์์ฝ์
๋ฐ ์ญ์ , ๋ฐฐ์ด ํน์ ๊ฐ์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ, ๋งํฌ๋๋ฆฌ์คํธ ์ค๊ฐ์ ์๋ ์ ๋ฆฌ๋ฌด๋ธ, ํธ๋ฆฌ find
quadratic O(n^2) ์์
: ์ด์คํฌ๋ฌธ
exponential O(c^n) ์์
: ์ฌ๊ท๋ก ํผ๋ณด๋์น ๊ตฌํํ๊ธฐ