8. 예제: 수열의 빠른 합
PNU ALCALL 2017 SUMMER
• O(log N)의 시간복잡도
- 재귀함수, for문 사용시 O(N)
- 확실히 기존의 방법보다 빠름
• N(N+1)/2 는 O(1)
- 하지만 방법 자체는 응용할 수 있음
- 행렬의 거듭제곱이 대표적인 예
8
10. 예제: 행렬의 거듭제곱
PNU ALCALL 2017 SUMMER
• 𝐴 𝑚을 나누는 방법은 𝐴 𝑚−1 × 𝐴 또는 𝐴
𝑚
2 × 𝐴
𝑚
2
• O(N) 과 O(log N)의 차이
- 당연히 빠른 걸 쓰는게 좋습니다
• 𝐴7 = 𝐴3 × 𝐴4 vs 𝐴7 = 𝐴6 × 𝐴
- 전자는 계산횟수 13회, 후자는 12회
- 홀수는 이전처럼 -1해서 짝수로 만드는게 좋음
- 겹치는 계산( 𝐴, 𝐴2) 발생 → Overlapping Subproblem
10
11. 퀵 정렬 / 병합 정렬
PNU ALCALL 2017 SUMMER
• 분할 정복 패러다임 기반
- 작은 배열의 정렬을 통한 큰 배열의 정렬
- 배열을 분리하는 방식의 차이
• 분할 정렬은 배열의 중간 index를 기준으로 나눔
- 분할 과정은 O(1), 병합과정은 O(n), 총 log n개의 단계
- 분할 과정은 빠르고, 병합 과정이 느림
• 퀵정렬은 pivot값과의 대소관계를 기준으로 나눔
- 분할 과정은 O(n), 병합과정은 O(1), 총 log n개의 단계
- 분할과정은 느리고, 병합 과정이 빠름.
- pivot에 따른 편차가 커서 최악의 경우에는 O(𝑛2)을 찍기도 함
11