빅오 표기법의 종류
O(1)
: 입력값에 상관없이 일정한 실행시간 (최고의 알고리즘)O(log n)
: 로그는 매우 큰 입력값에도 크게 영향을 받지 않는 편이다. 이진 탐색의 경우가 이에 해당한다.O(n)
: 실행시간이 입력값에 비례한다. 선형 시간 알고리즘이라 부른다. 정렬되지 않은 리스트에서 최대 또는 최솟값을 찾는 경우가 해당되며 모든 입력값을 적어도 한 번 이상 살펴봐야한다.O(n log n)
: 병합, 정렬 등의 대부분 효율이 좋은 알고리즘이 이에 해당한다. 아무리 좋은 알고리즘이라 할지라도 n log n보다 빠를 수 없다. 입력값이 최선일 경우, 비교를 건너뛰어 O(n)이 될 수 있다.O(n^2)
: 버블 정렬 같은 비효율적인 정렬 알고리즘이 이에 해당한다.O(2^n)
: 피보나치의 수를 재귀로 계산하는 알고리즘이 이에 해당한다. n^2보다 훨씬 크다.
Operation | Big-O | Notes |
---|---|---|
Index | O(1) | l[i] |
Store | O(1) | l[i] = 0 |
Length | O(1) | len(l) |
Append | O(1) | |
Pop | O(1) | l.pop(-1) 과 동일 |
Clear | O(1) | l.clear(), l = [] 과 유사 |
Slice | O(b-a) | l[a:b] |
Extend | O(len(k)) | l.extend(k) |
Construction | O(len(k)) | list(k) |
check | O(N) | ==, != |
Insert | O(N) | l.insert(i, v): i 위치에 v를 추가 |
Delete | O(N) | |
Remove | O(N) | |
Containment | O(N) | x in/not in l |
Copy | O(N) | l[:] 과 동일 |
Pop | O(N) | l.pop(0)도 O(N) |
Min/Max | O(N) | |
Reverse | O(N) | |
Loop | O(N) | |
Sort | O(N Log N) | |
Multiply | O(k N) |
Operation | Big-O | Notes |
---|---|---|
Index | O(1) | |
Store | O(1) | |
Length | O(1) | |
Delete | O(1) | |
Get / Setdefault | O(1) | 사전기본값 처리 |
Pop | O(1) | |
Pop item | O(1) | d.popitem() |
Clear | O(1) | s = {} or = dict()와 유사 |
View | O(1) | .keys(), .values() |
Construction | O(len(…)) | dict(…) |
Iteration | O(N) | for k in d: |
Operation | Big-O | Notes |
---|---|---|
copy | O(n) | |
append | O(1) | |
appendleft | O(1) | |
pop | O(1) | |
popleft | O(1) | |
extend | O(k) | a.extend(k) |
extendleft | O(k) | |
rotate | O(|k|) | k<0:반시계, k>0:시계 |
remove | O(n) |