간단히 말하면: 데이터가 늘어날 때 실행 시간이 얼마나 늘어나는지 측정하는 방법
예시로 이해하기:
순위 | Big O | 이름 | 예시 | 데이터 크기별 실행 시간 |
---|---|---|---|---|
🥇 | O(1) | 상수 시간 | 배열 인덱스 접근 | 항상 동일 |
🥈 | O(log n) | 로그 시간 | 이진 탐색 | 매우 느리게 증가 |
🥉 | O(n) | 선형 시간 | 배열 전체 순회 | 비례해서 증가 |
4위 | O(n log n) | 선형로그 | 효율적인 정렬 | 조금씩 빨라지며 증가 |
5위 | O(n²) | 제곱 시간 | 이중 반복문 | 급격히 증가 |
6위 | O(2ⁿ) | 지수 시간 | 피보나치(재귀) | 폭발적 증가 |
특징: 데이터 크기와 상관없이 항상 같은 시간
// 배열에서 특정 인덱스 값 가져오기
function getFirst(arr) {
return arr[0]; // 배열 크기와 상관없이 항상 똑같은 시간
}
// 배열이 10개든 1000개든 똑같이 빠름!
실생활 예시: 사전에서 페이지 번호로 바로 찾기
특징: 데이터가 2배 늘어도 실행 시간은 조금만 증가
// 이진 탐색 (정렬된 배열에서 값 찾기)
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
// 1000개 → 약 10번 비교
// 1000000개 → 약 20번 비교 (2배만 증가!)