Algorithm
[알고리즘]분할과 정복 개념 및 예시
ID_DI
2021. 10. 15. 21:17
분할과 정복
- 큰 입력의 문제를 작은 입력의 문제들로 나눈다.
- 나눈 작은 문제들의 해를 재귀적으로 구현한다.
- 재귀적으로 나눈 문제들의 해를 이용하여 원래 문제의 해를 구한다.
리스트(배열)에서 최대값 찾기
분할과 정복
Algorithm maximum(a, first, last)
if(first == last) then
return a[first]
else
mid = (first + last) // 2
lmax = maximum(a, first, mid)
rmax = maximum(a, mid + 1, last)
if lmax > rmax then
return lmax
else
return rmax
- mid 를 기준으로 나눈 왼쪽 반의 최대값 lmax 와 오른쪽 반의 최대값 rmax 를 비교하여 더 큰값이 전체 최대값이다.
수행시간분석
T(n) : maximum(a, 0, n-1)의 수행시간 (원소비교회수)
- n = 2k일 경우
- T(n) = 0 (n = 1 경우)
= 2T(n/2) + 1 (n > 1 경우)
T(n) = O(n)
- 일반적인 n에 대하여
- T(n) = 0 (n = 1 경우)
= 2T(n/2) + 1 (n > 1 경우)
T(n) = O(n)