์ฝ๋ ์์ฑ ์ ์, ์ผ์ ์ธ์ด๋ก ํ๋ก๊ทธ๋จ์ด ์๋ํ๋ ๋ ผ๋ฆฌ๋ฅผ ๋จผ์ ์์ฑํ๋ ๊ฒ
์์ฐ์ด(์ผ์ ์ธ์ด)์ ํ๋ก๊ทธ๋จ ์ธ์ด์ ์กฐํฉ์ผ๋ก ์ฌ์ฉํด์ผํจ
์๊ฐ์ด ๋จ์ถ ๋จ
๋๋ฒ๊น ์ ์ฉ์ดํจ (์ค๋ฅ ๋ฐ์ ์ ์์ฌ์ฝ๋๋ก ๋ ๋น ๋ฅด๊ฒ ์์ธ ํ์ ๊ฐ๋ฅ)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ชจ๋ฅด๋ ์ฌ๋๊ณผ ์ํต ๊ฐ๋ฅ
' ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ ๋ฐฉ์์ ๊ณ ๋ฏผํ๋ค = ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ฏผํ๋ค '
์ ๋ ฅ๊ฐ์ด ์ปค์ง์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ์๊ฐ์ ๋น์จ์ ์ต์ํํ ์๊ณ ๋ฆฌ์ฆ
์๊ฐ๋ณต์ก๋ ํ๊ธฐ๋ฒ : Big-O(๋น
-์ค) / Big-ฮฉ(๋น
-์ค๋ฉ๊ฐ) / Big-ฮธ(๋น
-์ธํ)
โ ๊ฐ๊ฐ ์ต์
/ ์ต์ / ์ค๊ฐ(ํ๊ท )์ ๊ฒฝ์ฐ์ ๋๋นํด ๋ํ๋ด๋ ๋ฐฉ๋ฒ
โ ์๊ฐ์ ๊ณ์ฐํ ๋ ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ ๋๋นํ๋ ๊ฒ์ด ๋ฐ๋์งํ๊ธฐ ๋๋ฌธ์
์ฃผ๋ก Big-O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ํ๋
๐ก Big-O ํ๊ธฐ๋ฒ
โ '์ ๋ ฅ๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ฐ์ฐ์ ์คํํ ๋, ์ฐ์ฐ ํ์์ ๋นํด ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋๊ฐ?' ๋ฅผ ํํํ ๋ฐฉ๋ฒ
( ์ฐ์ฐ์ด ๋น ๋ฅธ ์์ผ๋ก )
โ O(1) โ O(log n) โ O(n) โ O(n^2) โ O(2^n) โ O(n!)
์ผ์ ํ ๋ณต์ก๋(constant complexity)
Big-O ํ๊ธฐ๋ฒ์ค ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ ๋ณต์ก๋
์
๋ ฅ๊ฐ์ด ์ฆ๊ฐํ๋๋ผ๋ ์๊ฐ์ด ๋์ด๋์ง ์์
โ ์
๋ ฅ๊ฐ์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด, ์ฆ์ ์ถ๋ ฅ๊ฐ์ ์ป์ด๋ผ ์ ์๋ค๋ ์๋ฏธ
Ex. ๋ฐฐ์ด์ ํน์ ์ธ๋ฑ์ค ๊ฐ ๊ณ์ฐํ๊ธฐ
โ ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ๊ฐ ์๋ฌด๋ฆฌ ์ปค์ ธ๋ ๋ค๋ฅธ ๊ณ์ฐ ์์ด ํน์ ์ธ๋ฑ์ค์ ๊ฐ๋ง ์ถ๋ ฅํ๋ฉด ๋จ
์ ํ ๋ณต์ก๋(linear complexity)
์ ๋ ฅ๊ฐ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ฐ ๋ํ ๊ฐ์ ๋น์จ๋ก ์ฆ๊ฐ
Ex. ํ๋์ for๋ฌธ์ผ๋ก i๊ฐ ์ปค์ง๋ ๋งํผ ์ํํ๊ธฐ
โ ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ์ํํด์ผํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฅ๊ฐ ๋งํผ ์๊ฐ์ด ๊ฐ์ด ์ฆ๊ฐํจ
โ
โ ๏ธ ์ ๋ ฅ๊ฐ์ด 1์ฆ๊ฐํ ๋ ์คํ ์๊ฐ์ด 2์ด์ฉ ์ฆ๊ฐํด๋ O(n)์ผ๋ก ํ๊ธฐ
โ ์ ๋ ฅ๊ฐ์ด ์ปค์ง๋ฉด ์ปค์ง์๋ก ๊ณ์(n ์์ ์๋ ์)์ ์๋ฏธ(์ํฅ๋ ฅ)๊ฐ ์ ์ ํด์๋๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋น์จ๋ก ์ฆ๊ฐํ๊ณ ์๋ค๋ฉด 2๋ฐฐ๊ฐ ์๋ 5๋ฐฐ, 10๋ฐฐ๋ก ์ฆ๊ฐํ๋๋ผ๋ O(n)์ผ๋ก ํ๊ธฐ
๋ก๊ทธ ๋ณต์ก๋(logarithmic complexity)
Big-Oํ๊ธฐ๋ฒ์ค O(1) ๋ค์์ผ๋ก ๋น ๋ฅธ ์๊ฐ ๋ณต์ก๋
Ex. BST(Binary Search Tree) ์๋ฃ๊ตฌ์กฐ์์ ์ํ๋ ๊ฐ์ ํ์ํ ๋, ๋ ธ๋๋ฅผ ์ด๋ํ ๋๋ง๋ค ๊ฒฝ์ฐ์ ์๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋ฆ
โ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ํ์ํ ๋จ๊ณ๋ค์ด ์ฐ์ฐ๋ง๋ค ํน์ ์์ธ์ ์ํด ์ค์ด๋ฆ
2์ฐจ ๋ณต์ก๋(quadratic complexity)
์ ๋ ฅ๊ฐ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ฐ์ด n์ ์ ๊ณฑ์์ ๋น์จ๋ก ์ฆ๊ฐ
Ex. ์ค์ฒฉ๋ for๋ฌธ
โ for๋ฌธ์ ๊ฐ์์ ๋ฐ๋ผ n์ ์ ๊ณฑ์๋ก ์๊ฐ๋ณต์ก๋๊ฐ ๋์ด๋จ
โ
โ ๏ธ n^3๊ณผ n^5 ๋ ๋ชจ๋ O(n^2)๋ก ํ๊ธฐ
โ n์ด ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ง์๊ฐ ์ฃผ๋ ์ํฅ๋ ฅ์ด ์ ์ ํด์๋๊ธฐ ๋๋ฌธ์
Ex. ํผ๋ณด๋์น ์์ด fibonacci(n - 1) + fibonacci(n - 2)
โ n์ 40์ผ๋ก ๋์ด๋ ์์ด๊ฐ ๊ฑธ๋ฆฌ๊ณ n์ 100์ผ๋ก ํ๋ฉด ํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๋ฐ์ง ๋ชปํ ์๋ ์์
๋งค ์๊ฐ, ์ต์ ์ด๋ผ ์๊ฐ๋๋ ํด๋ต(locally optimal solution)์ ์ฐพ์ผ๋ฉฐ, ์ด๋ฅผ ํ ๋๋ก ์ต์ข ๋ฌธ์ ์ ํด๋ต(globally optimal solution)์ ๋๋ฌํ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์
ํญ์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ฒ์ ์๋์ง๋ง, ์ด๋ ์ ๋ ์ต์ ์ ๊ทผ์ฌํ ๊ฐ์ ๋น ๋ฅด๊ฒ ๋์ถํ ์ ์์
์ ํ ์ ์ฐจ(Selection Procedure)
โ ํ์ฌ ์ํ์์์ ์ต์ ์ ํด๋ต ์ ํ
์ ์ ์ฑ ๊ฒ์ฌ(Feasibility Check)
โ ์ ํ๋ ํด๊ฐ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฌ
ํด๋ต ๊ฒ์ฌ(Solution Check)
โ ์๋์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ๊ฒ์ฌ, ํด๊ฒฐ๋์ง ์์๋ค๋ฉด ์ ํ ์ ์ฐจ๋ก ๋์๊ฐ์ ์์ ๊ณผ์ ๋ฐ๋ณต
ํ์์ ์ ํ ์์ฑ(Greedy Choice Property)
โ ์์ ์ ํ์ด ์ดํ์ ์ ํ์ ์ํฅ์ ์ฃผ์ง ์์์ผํจ
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ(Optimal Substructure)
โ ๋ฌธ์ ๋ฅผ ์ต์ข
์ ์ผ๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ถ๋ถ ๋ฌธ์ ์ ๋ํ ์ต์ ์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ์ฑ
๋ํ์ ์ธ Ex.
๊ฐ๊ฒฉ๊ณผ ๋ฌด๊ฒ๊ฐ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋นต๋ค์ด ์์ ๋, 35g๊น์ง ๋ด์ ์ ์๋ ๊ฐ๋ฐฉ์ ์ต๋ํ ๊ฐ๊ฒฉ์ด ๋ง์ด ๋๊ฐ๋ ๋นต์ ์ฑ์ฐ๋ ค๊ณ ํ๋ค. (์ชผ๊ฐ์ด ๋ฃ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค)
โ
1. ๋ฃ์ ์ ์๋ ๋นต ์ค ๋ฌด๊ฒ ๋๋น ๊ฐ์ฅ ๋น์ผ ๋นต์ ๋ฃ๋๋ค.
2. ๊ทธ ๋ค์์ผ๋ก ๋ฌด๊ฒ ๋๋น ๋น์ผ ๋นต์ ๋ฃ๋๋ค.
3. ๊ฐ๋ฐฉ์ ๋ค ๋ค์ด๊ฐ์ง ์๋๋ค๋ฉด ์ชผ๊ฐ์ด ๋ฃ๋๋ค.
โ ๋ณธ์ธ์ด ์ ํํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ ํํ ์๊ณ ์๋ ์ํ์์, ๋ฌธ์ ์ ์กฐ๊ฑด์ ์ ๋ถ ๋ถํฉํ๋ ์ฝ๋๋ฅผ ์ค์์์ด ๋น ๋ฅด๊ฒ ์์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ๋๋ ๊ฒ
โ๏ธ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํผ๋ค.
โ ๋ด๊ฐ ์๊ฐํ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ์ปดํจํ ์ฌ๊ณ ๋ก ๋ณํํ์ฌ ์ฝ๋๋ก ๊ตฌํํ๋ค.
์์ ํ์ (brute force)
โ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ ํ์ธํ์ฌ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ์
์๋ฎฌ๋ ์ด์
(simulation)
โ ๋ฌธ์ ์์ ์๊ตฌํ๋ ๋ณต์กํ ๊ตฌํ ์๊ตฌ ์ฌํญ์ ํ๋๋ ๋น ํธ๋ฆฌ์ง ์๊ณ ์ฝ๋๋ก ์ฎ๊ฒจ, ๋ง์น ์๋ฎฌ๋ ์ด์
ํ๋ ๊ฒ์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๊ฒ
๋ฌด์ฐจ๋ณ ๋์ ๋ฐฉ๋ฒ์ ๋ํ๋ด๋ ์๊ณ ๋ฆฌ์ฆ
๊ณต๊ฐ๋ณต์ก๋์ ์๊ฐ๋ณต์ก๋์ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ์ต์ ์ ์๋๋ฆฌ์ค๋ฅผ ์ทจํ๋๋ผ๋ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ์๋ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ๋ฐฉ๋ฒ
But, ์ต์ ์ ์๋ฃจ์ ์ ์๋
๐ก ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ (Brute Force Attack)
- ํน์ ํ ์ํธ๋ฅผ ํ๊ธฐ ์ํด์ ๋ชจ๋ ๊ฐ์ ๋์ ํ๋ ๋ฐฉ๋ฒ
- ์ง๋ฅํ ์ ๋ต์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฐ๋ฅธ ์กฐํฉ์ ์ฐพ์ ๋๊น์ง ๋ค์ํ ์กฐํฉ์ ์๋ํ์ฌ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ํดํนํ๋ ๋ฐฉ๋ฒ
ํ๋ก์ธ์ค ์๋๋ฅผ ๋์ด๋๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ๋
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ๋ฌ ์๋ฃจ์ ์ด ์๊ณ ๊ฐ ์๋ฃจ์ ์ ํ์ธํด์ผ ํ ๋
์์ฐจ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
โ ๋ฐฐ์ด ์์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ๊ฒ์ํ ๋ ์ธ๋ฑ์ค ๋ถํฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง ์ฐจ๋ก๋๋ก ๊ฒ์
๋ฌธ์ด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ (Brute-Force String Matching)
โ ๊ธธ์ด๊ฐ n์ธ ์ ์ฒด ๋ฌธ์์ด๊ณผ ๊ธธ์ด๊ฐ m์ธ ๋ฌธ์์ด ํจํด์ ํฌํจํ๋์ง ๊ฒ์
์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Selection Sort)
โ ์ ์ฒด ๋ฐฐ์ด์ ์ํํ๋ฉด์ ํ์ฌ ์์์ ๊ทธ ๋ค์ ์์์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ์ฌ ์ปฌ๋ ์
์ด ์์ ํ ์ ๋ ฌ๋ ๋๊น์ง ํ์ฌ ์์๋ณด๋ค ๋ ์๊ฑฐ๋ ํฐ ์์(์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์์ ๋ฐ๋ผ)์ ์๋ฆฌ๋ฅผ ๊ตํํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๋ฒ๋ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Bubble Sort)
Tree ์๋ฃ ๊ตฌ์กฐ์ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ - Exhausive Search (BFS, DFS)
๋์ ํ๋ก๊ทธ๋๋ฐ - DP(Dynamic Programing)
๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ์์ ์ ๋ฐ์ฉ ๋ฒ์๋ฅผ ๋๋ ๋ถํ ์ ๋ณต๊ธฐ๋ฒ์ผ๋ก ํน์ ํ ๊ฐ์ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ
๋ณต์ก๋ : O(log n)
โ๏ธ ํ์ ์๊ณ ๋ฆฌ์ฆ
์๋ง์ ๋ฐ์ดํฐ์ค ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋ผ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
- Linear Search Algorithm(์ ํ ํ์ ์๊ณ ๋ฆฌ์ฆ)
- Binary Search Algorithm(์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ)
- Hash Search Algorithm(ํด์ ํ์ ์๊ณ ๋ฆฌ์ฆ)
์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์์๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ๊ฒ์ํ ๋ ์ฌ์ฉ
์ ๋ ฌ๋ ๋ฐ์ดํฐ์ ์์ด ๋ง์ ๋ ์ฌ์ฉ
โ ๊ณ์ ๋ฐ์ผ๋ก ์๋ฅด๋ฉด์ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์์ด ๋ง์ผ๋ฉด ๋ง์์๋ก ํจ์จ์ด ๋์์ง
( But, ๋ฐ์ดํฐ์์ด ์ ๊ณ , ์์ชฝ์ ์์นํ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๊ฒฝ์ฐ์๋ Linear Search Algorithm์ด ๋ ๋นจ๋ฆฌ ์ฐพ์ ์ ์์ )
Ex. ์ฌ์ , ๋์๊ด์ ๋์์ ๊ฐ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๊ฒ์
์ ๋ ฌ๋ ๋ฐฐ์ด์ ๊ฐ์ฅ ์ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ง์
์ฐพ์ผ๋ ค๊ณ ํ๋ ๊ฐ = ์ง์ ํ ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ ์ด๋ฉด ํ์ ์ข ๋ฃ / ์๋๋ผ๋ฉด 3๋จ๊ณ ์คํ
์ฐพ์ผ๋ ค๊ณ ํ๋ ๊ฐ์ด ์ค๊ฐ ์ธ๋ฑ์ค์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ธ์ง, ์์ ๊ฐ์ธ์ง ํ์ธ
๊ฐ์ด ์๋ ๋ถ๋ถ๊ณผ ๊ฐ์ด ์๋ ๋ถ๋ถ์ผ๋ก ๋ถ๋ฆฌ
๊ฐ์ด ์๋ ๋ถ๋ถ์์ ๋ค์ 1๋จ๊ณ๋ถํฐ ๋ฐ๋ณต
โ ๋ฐ์ผ๋ก ์๋ฅด๊ณ ํ์ํ๊ณ ๋ ๊ฑฐ๊ธฐ์ ๋ฐ์ผ๋ก ์๋ฅด๊ณ ํ์ํ๊ณ ๋ฐ๋ณตํ๋ฉด์ ์ฐพ๋ ๊ฒ
๋ฐฐ์ด์๋ง ๊ตฌํ ๊ฐ๋ฅ
์ ๋ ฌ๋์ด ์์ด์ผ๋ง ๊ตฌํ ๊ฐ๋ฅ
โ ๊ท๋ชจ๊ฐ ์์ ๋ฐฐ์ด์ด๋ผ๋ ์ ๋ ฌ์ด ๋์ด ์์ง ์๋ค๋ฉด ์ ๋ ฌ์ ํ ํ Binary Search Algorithm์ ์ฌ์ฉํด๋ ํจ์จ์ด ๋์ง ์์
๐ก BST (Binary Search Tree) vs BSA (Binary Search Algorithm)
BST - ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ํ๋
BSA - ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ๋
์ค๋์ ๊ฐ๋
๋ค์ด ๋ง์๋๋ฐ ์ฌ์ค ์ฝ์ผ๋ฉด์ ์ผ์ชฝ ๊ท๋ก ๋ค์ด๊ฐ์ ์ค๋ฅธ์ชฝ ๊ท๋ก ๋์ค๋ ๊ธฐ๋ถ์ด์๋ค
์ง์ค์ด ์ ์ด๋ ๊ฒ ์๋ผ ,, ๋ ์ด ์ข์์ ๊ทธ๋ด๊น..?
๋ฌธ์ ํ ๋๋ ์ดํด๋ ์๋๊ณ ํด๊ฒฐํ๊ณ ์ถ์ผ๋ ๋ช์๊ฐ์ด๋ ์๊ฐ๊ฐ๋ ์ค ๋ชจ๋ฅด๊ณ ๋ณด๋๋ฐ ์ด๋ฐ ๊ฐ๋
์ ์ง์ ํด๋ณด์ง ์์ผ๋ ๋ญ๊ฐ ๋จธ๋ฆฟ์์ ์๋ค์ด์จ๋ค ใ
์ค๋๋ ๋นก๊ณตํด์ ๋ด์ผ ๋ฌธ์ ์ ํ ์ ์๋๋ก ํด์ผ์ง