시간 복잡도

문제를 해결하는데 걸리는 시간과 입력의 함수 관계, 알고리즘이 입력 크기(n)에 따라 실행되는 데 걸리는 시간을 수학적으로 표현한 것

 

필요한 이유?

같은 문제를 풀더라도 알고리즘마다 속도가 다르다.

▶ 입력 데이터가 커질수록 실행 속도 차이가 커진다.

∴ 처리속도와 효율성, 최적화를 위해서 필요하다.

 

표기법

▶ 시간 복잡도는 빅오(Big-O) 표기법으로 표현

 

가장 빠르게 증가하는 항만 남기고 상수 계수는 무시합니다.

ex) 2n² + 6n + 10 → O(n²) 으로 표현

 

복잡도 이름 예시

O(1) 상수 시간 배열에서 인덱스로 접근
O(log n) 로그 시간 이진 탐색
O(n) 선형 시간 배열 전체 순회
O(n log n) 로그 선형 시간 효율적인 정렬(퀵정렬, 병합정렬)
O(n²) 제곱 시간 이중 반복문 (버블 정렬, 삽입 정렬)
O(2^n) 지수 시간 모든 부분 집합 탐색 (DFS 백트래킹 일부)
O(n!) 팩토리얼 시간 순열 전부 탐색

 

배열 [1, 2, 3, ..., n]이 있다고 할 때:

  • arr[0] 접근 → O(1) => n은 arr[0] 단 한개를 의미하므로 = 1
  • arr 전체 순회 → O(n) => (1~n까지) n 전체를 의미
  • 이중 for문으로 모든 쌍 확인 → O(n²) => 1~n * 1~n = n²
  • 정렬 후 이진 탐색 → O(n log n) + O(log n) ≈ O(n log n)

 

시간 복잡도 그래프

 

위에 그래프만 봐도 O(n)까지는 서서히 올라가지만, 그 이상 부터는 급격하게 올라가는 것을 알 수 있다.

 

마치며

스터디를 위해서 시간복잡도에 대해서 개념을 알아봤다.

일단, 이러한 것이 있다는 걸 알고 스터디 진행하면서 다시 이해하자 

 

'Etc > study' 카테고리의 다른 글

[4주차] 유니온 파인드 알고리즘  (0) 2025.10.17
[4주차] 세그먼트 트리  (0) 2025.10.16
[3주차] 비선형 자료구조  (0) 2025.10.06
[2주차] 정렬 알고리즘  (0) 2025.09.30
[1주차] 자료구조  (0) 2025.09.29

+ Recent posts