알고리즘 성능 분석 시, 입력 크기(n)에 대한 실행시간 및 공간(메모리) 사용량 표기법
→ n이 커질 때 얼마나 cost가 증가하는지 수학적으로 표현하는 개념
왜 필요?
종류
Big-O
표기 | 예시 | description |
---|---|---|
O(1) | 상수 시간 | 입력 크기(n)와 무관하게 항상 일정한 실행 시간 |
O(log n) | Log 시간 | 이진 탐색 (Binary Search) |
O(n) | 선형 시간 | 단순 반복문 (for loop) |
O(n log n) | 로그 선형 시간 | Quick Sort, Merge Sort |
O(n^2) | 제곱 시간 | 이중 루프 (Bubble Sort, Selection Sort) |
O(2^n) | 지수 시간 | Fibonacci Recursive |
예제
Binary Search란 배열에서 특정 값을 찾는 알고리즘으로, 매번 검색 범위를 절반으로 줄이면서 탐색하는 방식으로 시간 복잡도는 O(log n)이다.
→ 배열이 오름차순 등으로 정렬되어 있어야겠네?
Big-Ω 표기법 ; Omega
표기 | 예시 | description |
---|---|---|
Ω(1) | Linear Search | 목표 값이 첫 번째 위치에 있을 때 |
Ω(n log n) | Quick Sort | 이상적인 pivot 선택이 된 경우 |
Big Θ 표기법 ; theta
표기 | 예시 | description |
---|---|---|
Θ(n^2) | Bubble Sort | 최악과 최상이 모두 O(n^2) |
Θ(n) | Linear Search | 항상 n번 비교하므로 (loop문) |
Quick Sort 개념 추가
Tree는 계층 구조를 가진 비선형 데이터의 대표
BST (Binary Search Tree)
모든 왼쪽 자식(L) < 부모(P) < 모든 오른쪽 자식(R) 구조
연산은 기본적으로 Search, Insert, Delete
기본적으로 O(log n) 시간 복잡도지만, 한쪽으로 치우진 경우 (skewed) → O(n) ; n번 다
그래서 AVL Tree 활용
AVL (Adelson-Velsky & Landis)
AVl은 BST 단점 개선한 Balanced BST라고도 함
모든 노드의 왼쪽 Sub-Tree와 오른쪽 Sub-Tree의 높이 차이가 “1 이하”
균형을 유지하기 위해 Insertion/Delete시 “Rotation” 연산 수행
유형 | 해결 (Single or double) | 예시 |
---|---|---|
LL (Left-Left) | Right Rotation | 그림1 |
RR (Right-Right) | Left Rotation | |
LR | Left Rotation + Right Rotation (Double) | 그림2 |
RL | Right Rotation + Left Rotation (Double) |
결론적으로 Rotation cost는 있지만 항상 시
간 복잡도는 O(log n) 보장