Big O ํ๊ธฐ๋ฒ, ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋ ๋ถ์, ์ฑ๋ฅ ์ต์ ํ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋. ์ ์ธ๊ณ ์ํํธ์จ์ด ์์ง๋์ด๋ฅผ ์ํด ์๊ณ ๋ฆฌ์ฆ ํจ์จ์ฑ์ ๋ถ์ํ๊ณ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
Big O ํ๊ธฐ๋ฒ: ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋ ๋ถ์
์ํํธ์จ์ด ๊ฐ๋ฐ ์ธ๊ณ์์ ๊ธฐ๋ฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ๋ฐ์ ๋ ธ๋ ฅ์ ๋ถ๊ณผํฉ๋๋ค. ํนํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ฅ๋๊ณ ๋ ํฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฝ๋๊ฐ ํจ์จ์ ์ผ๋ก ์คํ๋๋๋ก ํ๋ ๊ฒ๋ ๋๊ฐ์ด ์ค์ํฉ๋๋ค. ์ด๊ฒ์ด Big O ํ๊ธฐ๋ฒ์ด ํ์ํ ์ด์ ์ ๋๋ค. Big O ํ๊ธฐ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ดํดํ๊ณ ๋ถ์ํ๋ ๋ฐ ์ค์ํ ๋๊ตฌ์ ๋๋ค. ์ด ๊ฐ์ด๋๋ Big O ํ๊ธฐ๋ฒ, ๊ทธ ์ค์์ฑ ๋ฐ ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Big O ํ๊ธฐ๋ฒ์ด๋ ๋ฌด์์ ๋๊น?
Big O ํ๊ธฐ๋ฒ์ ์ธ์๊ฐ ํน์ ๊ฐ ๋๋ ๋ฌดํ๋๋ก ํฅํ ๋ ํจ์์ ์ ํ ๋์์ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ํ์ ํ๊ธฐ๋ฒ์ ๋๋ค. ์ปดํจํฐ ๊ณผํ์์ Big O๋ ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์คํ ์๊ฐ ๋๋ ๊ณต๊ฐ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ๋ ๋ฐฉ์์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก์ฑ ์ฆ๊ฐ์จ์ ๋ํ ์ํ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์๋ก ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋น๊ตํ๊ณ ์ฃผ์ด์ง ์์ ์ ๊ฐ์ฅ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ด ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ํ์ฅ๋ ์ง ์ค๋ช ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ์ญ์์ค. ํ๋์จ์ด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ ์ ํํ ์คํ ์๊ฐ(์ด)์ด ์๋๋ผ ์คํ ์๊ฐ ๋๋ ๊ณต๊ฐ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ ์๋์ ๊ดํ ๊ฒ์ ๋๋ค.
Big O ํ๊ธฐ๋ฒ์ด ์ค์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
Big O ํ๊ธฐ๋ฒ์ ์ดํดํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ค์ํฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ: ์ฝ๋์ ์ ์ฌ์ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ ํ์ฅ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ: ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์์ธกํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ์ฆ๊ฐํ๋ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ์๊ณ ๋ฆฌ์ฆ ๋น๊ต: ์๋ก ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋น๊ตํ๊ณ ํน์ ๋ฌธ์ ์ ๊ฐ์ฅ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ํจ๊ณผ์ ์ธ ์์ฌ ์ํต: ๊ฐ๋ฐ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋ ผ์ํ๊ณ ๋ถ์ํ ์ ์๋ ๊ณตํต ์ธ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ๊ณต๊ฐ ๋ณต์ก์ฑ์ ์ดํดํ๋ฉด ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์์ ๋งค์ฐ ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ Big O ํ๊ธฐ๋ฒ
๋ค์์ ์๊ฐ ๋ณต์ก๋ ์ธก๋ฉด์์ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ์์๋๋ก ์ ๋ ฌ๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ Big O ํ๊ธฐ๋ฒ์ ๋๋ค.
- O(1) - ์์ ์๊ฐ: ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ์ผ์ ํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ด๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- O(log n) - ๋ก๊ทธ ์๊ฐ: ์คํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ก๊ทธ ๋ฐฉ์์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋งค์ฐ ํจ์จ์ ์ ๋๋ค. ์์์๋ ์ด์ง ๊ฒ์์ด ์์ต๋๋ค.
- O(n) - ์ ํ ์๊ฐ: ์คํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด n๊ฐ์ ์์ ๋ชฉ๋ก์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
- O(n log n) - ์ ํ๋ก๊ทธ ์๊ฐ: ์คํ ์๊ฐ์ n์ n์ ๋ก๊ทธ๋ฅผ ๊ณฑํ ๊ฐ์ ๋น๋กํ์ฌ ์ฆ๊ฐํฉ๋๋ค. ์์์๋ ๋ณํฉ ์ ๋ ฌ ๋ฐ ํต ์ ๋ ฌ(ํ๊ท )๊ณผ ๊ฐ์ ํจ์จ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค.
- O(n2) - ์ด์ฐจ ์๊ฐ: ์คํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ด์ฐจ์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํ๋ ์ค์ฒฉ ๋ฃจํ๊ฐ ์์ ๋ ๋ฐ์ํฉ๋๋ค.
- O(n3) - ์ผ์ฐจ ์๊ฐ: ์คํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ธ์ ๊ณฑ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด์ฐจ๋ณด๋ค๋ ๋ ๋์ฉ๋๋ค.
- O(2n) - ์ง์ ์๊ฐ: ์คํ ์๊ฐ์ ์ ๋ ฅ ๋ฐ์ดํฐ ์ธํธ์ ๊ฐ ํญ๋ชฉ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ๋ ๋ฐฐ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ฐ ํฌ๊ธฐ์ ์ ๋ ฅ์์๋ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
- O(n!) - ํฉํ ๋ฆฌ์ผ ์๊ฐ: ์คํ ์๊ฐ์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ํฉํ ๋ฆฌ์ผ์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด๋ ๊ฐ์ฅ ๋๋ฆฌ๊ณ ์ค์ฉ์ ์ด์ง ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
Big O ํ๊ธฐ๋ฒ์ ์ง๋ฐฐ์ ์ธ ํญ์ ์ด์ ์ ๋ง์ถ๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ์ ์ฐจ์ ํญ๊ณผ ์์ ์ธ์๋ ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ๋งค์ฐ ์ปค์ง์ ๋ฐ๋ผ ์ค์ํ์ง ์๊ฒ ๋๋ฏ๋ก ๋ฌด์๋ฉ๋๋ค.
์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋ ์ดํด
Big O ํ๊ธฐ๋ฒ์ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋ ๋ชจ๋๋ฅผ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ด ์ด๋ป๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ ์ข ์ข Big O ๋ถ์์ ์ฃผ์ ์ด์ ์ ๋๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋: ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ด๋ป๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ๋ณด์กฐ ๊ณต๊ฐ, ์ฆ ์ ๋ ฅ์ ์ ์ธํ๊ณ ์ฌ์ฉ๋๋ ๊ณต๊ฐ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋์ด ์๊ฑฐ๋ ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ค์ํฉ๋๋ค.
๋๋ก๋ ๊ณต๊ฐ ๋ณต์ก๋ ๋์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฑฐ๋ํ ์ ์๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํด์ ํ ์ด๋ธ(๊ณต๊ฐ ๋ณต์ก๋๊ฐ ๋ ๋์)์ ์ฌ์ฉํ์ฌ ์กฐํ๋ฅผ ๊ฐ์ํํ ์ ์์ต๋๋ค(์๊ฐ ๋ณต์ก๋ ๊ฐ์ ).
์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋ ๋ถ์: ์์
Big O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋๋ฅผ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ์ ํ ๊ฒ์ (O(n))
์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ๊ฒ์ํ๋ ํจ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค.
function linearSearch(array, target) {
for (let i = 0; i < array.length; i++) {
if (array[i] === target) {
return i; // Found the target
}
}
return -1; // Target not found
}
์ต์ ์ ๊ฒฝ์ฐ(๋์์ ๋ฐฐ์ด์ ๋์ ์๊ฑฐ๋ ์กด์ฌํ์ง ์์) ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ด์ ๋ชจ๋ n ์์๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๋ฉฐ, ์ด๋ ์์๋๋ ์๊ฐ์ด ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ ๋์ ์กฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์์ ๊ณ ๊ฐ ID๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ O(n)์ด ๋ ์ ์์ต๋๋ค.
์์ 2: ์ด์ง ๊ฒ์ (O(log n))
์ด์ ์ด์ง ๊ฒ์์ ์ฌ์ฉํ์ฌ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๊ฐ์ ๊ฒ์ํ๋ ํจ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค.
function binarySearch(array, target) {
let low = 0;
let high = array.length - 1;
while (low <= high) {
let mid = Math.floor((low + high) / 2);
if (array[mid] === target) {
return mid; // Found the target
} else if (array[mid] < target) {
low = mid + 1; // Search in the right half
} else {
high = mid - 1; // Search in the left half
}
}
return -1; // Target not found
}
์ด์ง ๊ฒ์์ ๊ฒ์ ๊ฐ๊ฒฉ์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ผ๋ก ๋๋์ด ์๋ํฉ๋๋ค. ๋์์ ์ฐพ๋ ๋ฐ ํ์ํ ๋จ๊ณ ์๋ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ํด ๋ก๊ทธ ๋ฐฉ์์ผ๋ก ํํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ง ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๋ O(log n)์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ ์์ ์ํ๋ฒณ์์ผ๋ก ์ ๋ ฌ๋ ๋จ์ด๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฐ ๋จ๊ณ๋ง๋ค ๊ฒ์ ๊ณต๊ฐ์ด ๋ฐ์ผ๋ก ์ค์ด๋ญ๋๋ค.
์์ 3: ์ค์ฒฉ ๋ฃจํ (O(n2))
๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ค๋ฅธ ๋ชจ๋ ์์์ ๋น๊ตํ๋ ํจ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค.
function compareAll(array) {
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length; j++) {
if (i !== j) {
// Compare array[i] and array[j]
console.log(`Comparing ${array[i]} and ${array[j]}`);
}
}
}
}
์ด ํจ์์๋ n ์์๋ฅผ ๋ฐ๋ณตํ๋ ์ค์ฒฉ ๋ฃจํ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ์ฐ์ฐ ์๋ n * n = n2์ ๋น๋กํฉ๋๋ค. ์๊ฐ ๋ณต์ก๋๋ O(n2)์ ๋๋ค. ์ด๊ฒ์ ์๋ก๋ ๊ฐ ํญ๋ชฉ์ ๋ค๋ฅธ ๋ชจ๋ ํญ๋ชฉ๊ณผ ๋น๊ตํด์ผ ํ๋ ๋ฐ์ดํฐ ์ธํธ์์ ์ค๋ณต ํญ๋ชฉ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค. ๋ ๊ฐ์ for ๋ฃจํ๊ฐ ์๋ค๊ณ ํด์ ๋ณธ์ง์ ์ผ๋ก O(n^2)์ธ ๊ฒ์ ์๋๋ผ๋ ์ ์ ๊นจ๋ซ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฃจํ๊ฐ ์๋ก ๋ ๋ฆฝ์ ์ธ ๊ฒฝ์ฐ O(n+m)์ด๋ฉฐ, ์ฌ๊ธฐ์ n๊ณผ m์ ๋ฃจํ์ ๋ํ ์ ๋ ฅ ํฌ๊ธฐ์ ๋๋ค.
์์ 4: ์์ ์๊ฐ (O(1))
์ธ๋ฑ์ค๋ก ๋ฐฐ์ด์ ์์์ ์ก์ธ์คํ๋ ํจ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค.
function accessElement(array, index) {
return array[index];
}
์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐฐ์ด์ ์์์ ์ก์ธ์คํ๋ ๋ฐ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ๋์ผํ ์๊ฐ์ด ์์๋ฉ๋๋ค. ์ด๋ ๋ฐฐ์ด์ด ์์์ ์ง์ ์ก์ธ์คํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ ๋๋ค. ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํด์ ๋งต์์ ๊ฐ์ ๊ฒ์ํ๋ ๊ฒ์ ์์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์ฐ์ฐ์ ์์ ๋๋ค. ์ด๊ฒ์ ๋์ ๋ด ๊ฑด๋ฌผ์ ์ ํํ ์ฃผ์๋ฅผ ์๋ ๊ฒ(์ง์ ์ก์ธ์ค)๊ณผ ๊ฑด๋ฌผ์ ์ฐพ๊ธฐ ์ํด ๋ชจ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฒ์ํด์ผ ํ๋ ๊ฒ(์ ํ ๊ฒ์)์ ๋น๊ตํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ค์ ์ ์๋ฏธ
Big O ํ๊ธฐ๋ฒ์ ์ดํดํ๋ ๊ฒ์ ๋ค์ํ ์ง์ญ๊ณผ ์ฌ์ฉ์ ๊ธฐ๋ฐ์์ ๋ค์ํ๊ณ ํฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ํนํ ์ค์ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ: ๋ค์ํ ์์ค(์: ์์ ๋ฏธ๋์ด ํผ๋, ์ผ์ ๋ฐ์ดํฐ, ๊ธ์ต ๊ฑฐ๋)์์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ๋, ์ข์ ์๊ฐ ๋ณต์ก๋(์: O(n log n) ์ด์)๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ์ ์ ์์ ํต์ฐฐ๋ ฅ์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ๊ฒ์ ์์ง: ๋ฐฉ๋ํ ์์ธ์์ ๊ด๋ จ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๋ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค๋ฉด ๋ก๊ทธ ์๊ฐ ๋ณต์ก๋(์: O(log n))๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํฉ๋๋ค. ์ด๋ ๋ค์ํ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ง ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ค์ํฉ๋๋ค.
- ์ถ์ฒ ์์คํ : ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ถ์ํ๊ณ ๊ด๋ จ ์ฝํ ์ธ ๋ฅผ ์ ์ํ๋ ๋ง์ถคํ ์ถ์ฒ ์์คํ ์ ๊ตฌ์ถํ๋ ค๋ฉด ๋ณต์กํ ๊ณ์ฐ์ด ํ์ํฉ๋๋ค. ์ต์ ์ ์๊ฐ ๋ฐ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์ค์๊ฐ์ผ๋ก ์ถ์ฒ์ ์ ๊ณตํ๊ณ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ ์ ์๊ฑฐ๋ ํ๋ซํผ: ๋๊ท๋ชจ ์ ํ ์นดํ๋ก๊ทธ์ ์ฌ์ฉ์ ๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์ ํ ๊ฒ์, ์ฌ๊ณ ๊ด๋ฆฌ ๋ฐ ๊ฒฐ์ ์ฒ๋ฆฌ์ ๊ฐ์ ์์ ์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํด์ผ ํฉ๋๋ค. ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ํนํ ์ฑ์๊ธฐ ์ผํ ์์ฆ ๋์ ๋๋ฆฐ ์๋ต ์๊ฐ๊ณผ ์ด์ ํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ง๋ฆฌ ๊ณต๊ฐ ์ ํ๋ฆฌ์ผ์ด์ : ์ง๋ฆฌ์ ๋ฐ์ดํฐ(์: ์ง๋ ์ฑ, ์์น ๊ธฐ๋ฐ ์๋น์ค)๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๊ฑฐ๋ฆฌ ๊ณ์ฐ ๋ฐ ๊ณต๊ฐ ์ธ๋ฑ์ฑ๊ณผ ๊ฐ์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ํฌํจํฉ๋๋ค. ์ ์ ํ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ์ ์๋ต์ฑ๊ณผ ํ์ฅ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ : ๋ชจ๋ฐ์ผ ์ฅ์น์๋ ์ ํ๋ ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ, ๋ฐฐํฐ๋ฆฌ)๊ฐ ์์ต๋๋ค. ๋ฎ์ ๊ณต๊ฐ ๋ณต์ก๋์ ํจ์จ์ ์ธ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์๋ต์ฑ๊ณผ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋ ์ต์ ํ๋ฅผ ์ํ ํ
์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก๋๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ: ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์:
- ํค๋ก ์์๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ ค๋ฉด ๋ฐฐ์ด(O(n) ์กฐํ) ๋์ ํด์ ํ ์ด๋ธ(O(1) ํ๊ท ์กฐํ)์ ์ฌ์ฉํฉ๋๋ค.
- ํจ์จ์ ์ธ ์ฐ์ฐ์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ท ํ ์ด์ง ๊ฒ์ ํธ๋ฆฌ(O(log n) ์กฐํ, ์ฝ์ ๋ฐ ์ญ์ )๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ๊ทธ๋ํ ํธ๋๋ฒ์ค์ ํจ์จ์ ์ผ๋ก ์ํํ๋ ค๋ฉด ๊ทธ๋ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ถํ์ํ ๋ฃจํ ๋ฐฉ์ง: ์ค์ฒฉ ๋ฃจํ ๋๋ ์ค๋ณต ๋ฐ๋ณต์ด ์๋์ง ์ฝ๋๋ฅผ ๊ฒํ ํ์ญ์์ค. ๋ฐ๋ณต ํ์๋ฅผ ์ค์ด๊ฑฐ๋ ๋ ์ ์ ๋ฃจํ๋ก ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๋์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ฐพ์ผ์ญ์์ค.
- ๋ถํ ์ ๋ณต: ํฐ ๋ฌธ์ ๋ฅผ ๋ ์๊ณ ๋ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํ์ ๋ฌธ์ ๋ก ๋๋๊ธฐ ์ํด ๋ถํ ์ ๋ณต ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๊ฒ์ ์ข ์ข ๋ ๋์ ์๊ฐ ๋ณต์ก๋(์: ๋ณํฉ ์ ๋ ฌ)๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ๋ฐ ์บ์ฑ: ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ ๊ฒฝ์ฐ, ๋ฉ๋ชจ์ด์ ์ด์ (๋น์ฉ์ด ๋ง์ด ๋๋ ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ๋์ผํ ์ ๋ ฅ์ด ๋ค์ ๋ฐ์ํ ๋ ์ฌ์ฌ์ฉ) ๋๋ ์บ์ฑ์ ์ฌ์ฉํ์ฌ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ด์ฅ ํจ์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋๋ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์ต์ ํ๋ ๋ด์ฅ ํจ์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ์ญ์์ค. ์ด๋ฌํ ํจ์๋ ์ข ์ข ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ผ๋ฉฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ฝ๋ ํ๋กํ์ผ๋ง: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ญ์์ค. ํ๋กํ์ผ๋ฌ๋ ์๊ฐ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์๋นํ๋ ์ฝ๋ ์น์ ์ ์ ํํ ์ฐพ์๋ด์ด ํด๋น ์์ญ์ ์ต์ ํ ๋ ธ๋ ฅ์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋๋ค.
- ์ ๊ทผ์ ๋์ ๊ณ ๋ ค: ํญ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทผ์ ๋์(Big O)์ ์๊ฐํ์ญ์์ค. ์์ ์ ๋ ฅ์ ๋ํด์๋ง ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ง์ดํฌ๋ก ์ต์ ํ์ ๋๋ฌด ์ฝ๋งค์ด์ง ๋ง์ญ์์ค.
Big O ํ๊ธฐ๋ฒ ์นํธ ์ํธ
๋ค์์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฐ์ฐ ๋ฐ ํด๋น ์ผ๋ฐ์ ์ธ Big O ๋ณต์ก์ฑ์ ๋ํ ๋น ๋ฅธ ์ฐธ์กฐ ํ ์ด๋ธ์ ๋๋ค.
| ๋ฐ์ดํฐ ๊ตฌ์กฐ | ์์ | ํ๊ท ์๊ฐ ๋ณต์ก๋ | ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋ |
|---|---|---|---|
| ๋ฐฐ์ด | ์ก์ธ์ค | O(1) | O(1) |
| ๋ฐฐ์ด | ๋์ ์ฝ์ | O(1) | O(1) (amortized) |
| ๋ฐฐ์ด | ์์ ๋ถ๋ถ์ ์ฝ์ | O(n) | O(n) |
| ๋ฐฐ์ด | ๊ฒ์ | O(n) | O(n) |
| ์ฐ๊ฒฐ ๋ชฉ๋ก | ์ก์ธ์ค | O(n) | O(n) |
| ์ฐ๊ฒฐ ๋ชฉ๋ก | ์์ ๋ถ๋ถ์ ์ฝ์ | O(1) | O(1) |
| ์ฐ๊ฒฐ ๋ชฉ๋ก | ๊ฒ์ | O(n) | O(n) |
| ํด์ ํ ์ด๋ธ | ์ฝ์ | O(1) | O(n) |
| ํด์ ํ ์ด๋ธ | ์กฐํ | O(1) | O(n) |
| ์ด์ง ๊ฒ์ ํธ๋ฆฌ (๊ท ํ) | ์ฝ์ | O(log n) | O(log n) |
| ์ด์ง ๊ฒ์ ํธ๋ฆฌ (๊ท ํ) | ์กฐํ | O(log n) | O(log n) |
| ํ | ์ฝ์ | O(log n) | O(log n) |
| ํ | ์ต์/์ต๋ ์ถ์ถ | O(1) | O(1) |
Big O ๋๋จธ: ๊ธฐํ ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ
Big O ํ๊ธฐ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ๊ฐ์น ์๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ์ง๋ง ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์ ์ผํ ์์๋ ์๋๋ผ๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค๋ฅธ ๊ณ ๋ ค ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ๋์จ์ด: CPU ์๋, ๋ฉ๋ชจ๋ฆฌ ์ฉ๋ ๋ฐ ๋์คํฌ I/O๋ ๋ชจ๋ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด: ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์๋ก ๋ค๋ฅธ ์ฑ๋ฅ ํน์ฑ์ ๊ฐ์ต๋๋ค.
- ์ปดํ์ผ๋ฌ ์ต์ ํ: ์ปดํ์ผ๋ฌ ์ต์ ํ๋ ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์ฝ๋์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์์คํ ์ค๋ฒํค๋: ์ปจํ ์คํธ ์ ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ์ด์ ์ฒด์ ์ค๋ฒํค๋๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ: ๋ถ์ฐ ์์คํ ์์ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ ์๋นํ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Big O ํ๊ธฐ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ดํดํ๊ณ ๋ถ์ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. Big O ํ๊ธฐ๋ฒ์ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ํ์ฅ์ฑ๊ณผ ํจ์จ์ฑ์ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํ ์ง์ ๋ํด ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํฌ๊ณ ๋ค์ํ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ํนํ ์ค์ํฉ๋๋ค. Big O ํ๊ธฐ๋ฒ์ ๋ง์คํฐํ๋ ๊ฒ์ ๊ธ๋ก๋ฒ ์ฒญ์ค์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ ์ ์๋ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ ๋ชจ๋ ์ํํธ์จ์ด ์์ง๋์ด์๊ฒ ํ์์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก์ฑ์ ์ง์คํ๊ณ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํจ์ผ๋ก์จ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ํฌ๊ธฐ๋ ์์น์ ๊ด๊ณ์์ด ํจ์จ์ ์ผ๋ก ํ์ฅ๋๊ณ ํ๋ฅญํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ๊ณ ์ค์ ๋ก๋์์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๊ฐ์ ์ ๊ฒ์ฆํ๊ณ ๊ตฌํ์ ๋ฏธ์ธ ์กฐ์ ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. Big O๋ ์ฑ์ฅ ์จ์ ๊ดํ ๊ฒ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ์ญ์์ค. ์์ ์ธ์๋ ์ค์ ๋ก ์๋นํ ์ฐจ์ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.