Big-O 표기법
n이 증가할 때 가장 빨리 증가하는 항(최고차 항)만 남기고 다른 항은 모두 생략 후 가장 빨리 증가하는 항에 곱해진 상수 또한 생략. 그 후 남은 항을 O()안에 넣어 표기하는 방법.
O(log n)의 시간 복잡도
- log₂N 으로 데이터에 원소가 N개 있을 때 알고리즘이 log₂N 시간이 걸림
- 예를 들어 이진 탐색 트리에서 원하는 항목을 찾는 알고리즘
Quicksort 의 시간복잡도 구해보기
def quicksort(x):
if len(x) <= 1:
return x
pivot = x[len(x) // 2]
less = []
more = []
equal = []
for a in x:
if a < pivot:
less.append(a)
elif a > pivot:
more.append(a)
else:
equal.append(a)
return quicksort(less) + equal + quicksort(more)
n개의 수를 정렬할 때
- 평균적인 경우
pivot을 기준으로 리스트가 두 개의 거의 같은 부분집합으로 나눠진다고 가정시
log n 번 나눠지게 되고 각 단계에서 n번의 탐색을 하게 된다.
이 경우 시간복잡도는 O(nlog n)
2. 최악의 경우
pivot이 항상 최소값이나 최대값만을 지정하는 경우 리스트는 n번 나눠지게 된다.
탐색은 동일하게 n번 수행하므로 시간복잡도는 O(n*2)
'자료구조, 알고리즘' 카테고리의 다른 글
이진트리, 전/중/후위순회, n개의 객체 만들기, enumerate (0) | 2024.01.12 |
---|---|
BFS (0) | 2024.01.10 |
하노이의탑(yield) (1) | 2024.01.09 |
문자열 리스트화, DFS, 재귀 (0) | 2024.01.08 |
숫자 짝궁 문제(list comprehension, all(), .join()) (0) | 2023.12.31 |