계산 복잡도
-
시간 복잡도 (Time Complexity)
- 알고리즘을 수행하는 데 걸리는 시간을 설명하는 계산 복잡도
- 이를 표기하는 대표적인 방법이 Big-O
-
공간 복잡도 (Space Complexity)
- 알고리즘의 메모리 사용량을 설명하는 계산 복잡도
빅오 (O, Big-O)
-
O(1) : 입력값이 아무리 커도 실행 시간이 일정한 최고의 알고리즘
- 해시 테이블의 조회 및 삽입
-
O(log n) : 여기서부터 실행 시간은 입력값에 영향 받음
- 이진 검색
-
O(n) : 선형 시간 알고리즘으로 수행하는 데 걸리는 시간이 입력값에 비례
- 정렬되지 않은 리스트에서의 최댓값, 최솟값
- O(nlog n) : 대부분의 효율 좋은 정렬 알고리즘
- O(n2) : 버블 정렬과 같은 비효율적인 정렬 알고리즘
- O(2n) : 피보나치 수를 재귀로 계산하는 알고리즘
-
O(n!) : 가장 느린 알고리즘
- TSP(Traveling Salesman Problem)를 브루트 포스로 풀이하는 경우
- 빅오(O) : 상한 (upper bound) = 가장 늦게 실행될 때
- 빅세타(θ) : 평균
- 빅오메가(Ω) : 하한 (lower bound) = 가장 빨리 실행될 때
분할 상환 분석 (Amortized Analysis)
- 알고리즘의 복잡도 계산 시 최악의 경우만을 살펴보는 것은 지나치게 비관적이라는 이유로 등장
- 최악의 경우를 여러 번에 걸쳐 골고루 나눠주는 형태로 계산
참고 : 「파이썬 알고리즘 인터뷰」