[์๋ฃ๊ตฌ์กฐ] ๋ณต์ก๋(์๊ฐ ๋ณต์ก๋, ๊ณต๊ฐ ๋ณต์ก๋), ๋น ์ค ํ๊ธฐ๋ฒ
์๋ฃ๊ตฌ์กฐ Data structure
: ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ, ์์ , ์ญ์ , ํ์, ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ ์งํฉ
์๊ณ ๋ฆฌ์ฆ Algorithm
: ํํ ๋ฐ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ํ๋ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
โก๏ธ ์๋ฃ๊ตฌ์กฐ๊ฐ ๊ฒฐ์ ๋์ด์ผ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํ ์ ์๋ค.
๋ณต์ก๋ Complexity
์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด ํจ์จ์ ์ธ์ง๋ฅผ ํ๋จํ๋ ์ฒ๋
1๏ธโฃ์๋, 2๏ธโฃ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
- ์๋์ ํด๋นํ๋ ์๊ณ ๋ฆฌ์ฆ ์ํ์๊ฐ ๋ถ์๊ฒฐ๊ณผ โก๏ธ ์๊ฐ๋ณต์ก๋
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํด๋นํ๋ ๋ถ์๊ฒฐ๊ณผ โก๏ธ ๊ณต๊ฐ ๋ณต์ก๋
โฐ์๊ฐ ๋ณต์ก๋ Time Complexity
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ์ ๋ ฅ์ ํจ์ ๊ด๊ณ
โก๏ธ ์ด๋ ํ ์๊ณ ๋ฆฌ์ฆ ๋ก์ง์ด ์ผ๋ง๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋์ง
๐พ ๊ณต๊ฐ ๋ณต์ก๋ Space Complexity
ํ๋ก๊ทธ๋จ์ ์คํ๊ณผ ์๋ฃ์ ํ์ํ ์์ ๊ณต๊ฐ์ ์
โก๏ธ ์ผ๋ง๋ ๋ง์ ๊ณต๊ฐ(๋ฉ๋ชจ๋ฆฌ)๊ฐ ํ์ํ์ง
- ์๊ณ ๋ฆฌ์ฆ ์คํ์ ํ์ํ ๊ณต๊ฐ
- ๊ณ ์ ๊ณต๊ฐ: ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฌด๊ดํ ๊ณต๊ฐ
- ์ฝ๋๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ, ์๊ณ ๋ฆฌ์ฆ ์คํ์ ์ํด ์์คํ ์ด ํ์๋ก ํ๋ ๊ณต๊ฐ - ๊ฐ๋ณ ๊ณต๊ฐ: ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ ํ ๊ณต๊ฐ
- ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์๊ณ ๋ฆฌ์ฆ์ด ํ์๋ก ํ๋ ๊ณต๊ฐ, ๋ณ์ ์ ์ฅ ๊ณต๊ฐ, ์ฝ๋ ์คํ ์ ์ฌ๊ท ๋ฑ์ผ๋ก ๋์ ์์ฑ๋๋ ๊ณต๊ฐ
- ๊ณ ์ ๊ณต๊ฐ: ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฌด๊ดํ ๊ณต๊ฐ
๋น ์ค ํ๊ธฐ๋ฒ Big-O
์ ๋ ฅ ๋ฒ์ n์ ๊ธฐ์ค์ผ๋ก ๋ก์ง์ด ๋ช ๋ฒ ๋ฐ๋ณต๋๋์ง ๋ํ๋ด๋ ๊ฒ
T(n)์ด ๋คํญ์์ผ๋ก ํํ๋ ๊ฒฝ์ฐ, ์ต๊ณ ์ฐจํญ์ ์ฐจ์๊ฐ ๋น -์ค๊ฐ ๋๋ค.
→ ๊ฐ์ฅ ๋ง์ด ์ํฅ์ ๋ผ์น๋ ํญ์ ์์ ์ธ์๋ฅผ ๋นผ๊ณ ๋๋จธ์ง ํญ์ ์์ ๋ ๊ฒ
โก๏ธ ๋ฐ์ดํฐ ์์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์ฐ์ฐ ํ์์ ์ฆ๊ฐ ํํ๋ฅผ ํํํ ๊ฒ
- ๋ํ์ ์ธ ๋น
-์ค
- O(1) : ์์ํ ๋น -์ค : ๋ฐ์ดํฐ ์์ ์๊ด์์ด ์ฐ์ฐ ํ์๊ฐ ๊ณ ์ ์ธ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ
- O(logN) : ๋ก๊ทธํ ๋น -์ค : ๋ฐ์ดํฐ ์์ ์ฆ๊ฐ์จ์ ๋นํด ์ฐ์ฐ ํ์์ ์ฆ๊ฐ์จ์ด ํจ์ฌ ๋ฎ์ ์๊ณ ๋ฆฌ์ฆ
- O(N) : ์ ํ ๋น -์ค : ๋ฐ์ดํฐ ์์ ์ฐ์ฐ ํ์๊ฐ ๋น๋กํ๋ ์๊ณ ๋ฆฌ์ฆ
- O(NlogN) : ์ ํ๋ก๊ทธํ ๋น -์ค : ๋ฐ์ดํฐ ์๊ฐ 2๋ฐฐ ์ฆ๊ฐํ ๋ ์ฐ์ฐ ํ์๋ 2๋ฐฐ๋ฅผ ์กฐ๊ธ ๋๊ฒ ์ฆ๊ฐํ๋ ์๊ณ ๋ฆฌ์ฆ
- O(N^2) : ๋ฐ์ดํฐ ์์ ์ ๊ณฑ์ ํด๋นํ๋ ์ฐ์ฐ ํ์๋ฅผ ์๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ → ๋ฐ์ดํฐ ์ ๅค๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ๋ถ์ ์
- O(N^3) : ๋ฐ์ดํฐ ์์ ์ธ ์ ๊ณฑ์ ํด๋นํ๋ ์ฐ์ฐ ํ์๋ฅผ ์๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ → ๋ฐ์ดํฐ ์ ๅค๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ๋ถ์ ์
- O(2^N) : ์ง์ํ ๋น -์ค : ๋ณดํต ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ์ฌ์ฉํ๊ธฐ ๋งค์ฐ ๋ถ์ ์
โก๏ธ ์ฑ๋ฅ(์ํ์๊ฐ, ์ฐ์ฐํ์)์ ๋์ O(1) < O(logN) < O(N) < O(NlogN) < O(N^2) < O(N^3) < O(2^N)