이것이 취업을 위한 코딩테스트다를 읽고 정리한 문서입니다.
알고리즘의 성능을 나타내는 척도
시간복잡도: 특정 크기의 입력에 대한 알고리즘의 수행 시간
공간 복잡도: 특정 크기의 입력에 대한 알고리즘의 메모리 사용량
일반적으로 거래 관계가 성립
ex) memoization - 메모리를 더 많이 사용해 시간을 비약적으로 줄이는 방법
Big O 표기법
알고리즘의 최악의 경우를 상정한 계산법
⇒ 가장 빠르게 증가하는 항만을 고려 (간단한 정의)
ex)
n에 비례하는 연산을 수행하는 반복문의 경우 O(N)
단순 연산: O(1)
이중 for 문: O() (예외 존재)
비교
O(1) < O() < O(N) < O() < O() < O() < O()
주의할 점
제한시간 1초인 경우
N | 시간복잡도 |
---|---|
500 | O() |
2000 | O() |
100,000 | O() |
10,000,000 | O(N) |
import time
start_time = time.time()
#프로그램 소스 코드
end_time = time.time()
print("time: end_time-start_time")
파이썬 기본 정렬 라이브러리는 O(NlogN)의 성능을 보장한다.