시간 복잡도(Time Complexity)란?
알고리즘에 필요한 수고(시간 복잡도)나 기억 영역(공간 복잡도)이 데이터의 수 n에 대해 어떻게 늘어나는지를 나타낸 것. O(n)이나 O(n log n), O(n²) 같은 점근 표기법(빅오 표기법)으로, 계수나 낮은 차수의 항을 생략하여 쓴다.
일본어 명칭: 計算量
시간 복잡도(Time Complexity)은(는) 자료 구조와 알고리즘 등 1개 분야의 연습 문제 7개에 나와요.
분야: 자료 구조와 알고리즘
빅오 표기법 읽는 법
O(f(n))은 n이 충분히 클 때 수고가 대략 f(n)의 상수배 이하에 들어간다는 것을 나타냅니다. 비교 횟수가 3n² + 5n + 2회인 알고리즘은 n이 커지면 n²의 항이 지배적이 되므로 O(n²)으로 씁니다. 자주 나오는 순서로 O(1)(상수), O(log n)(이진 탐색), O(n)(선형 탐색), O(n log n)(병합 정렬, 힙 정렬), O(n²)(버블 정렬, 선택 정렬), O(2ⁿ)(단순한 전수 탐색) 등이 있습니다. n = 1000일 때 log₂ n은 약 10, n log₂ n은 약 1만, n²은 100만이므로, 큰 데이터에서는 차수의 차이가 결정적이 됩니다.
자주 묻는 질문
O(log n)의 log의 밑은 무엇인가요?
밑을 바꿔도 상수배밖에 차이 나지 않으므로(log₂ n = log₁₀ n ÷ log₁₀ 2), 빅오 표기법에서는 밑을 쓰지 않는 것이 보통입니다. 이진 탐색처럼 절반씩 나누는 경우는 실제 횟수가 log₂ n에 가까워집니다.
시간 복잡도와 공간 복잡도의 차이는 무엇인가요?
시간 복잡도는 처리의 수고(실행 시간)가 늘어나는 방식, 공간 복잡도는 필요한 기억 영역이 늘어나는 방식입니다. 병합 정렬은 시간 O(n log n), 작업용 공간 O(n)이고, 힙 정렬은 시간 O(n log n), 공간 O(1)인 것처럼 둘을 함께 비교합니다.