1. Week4. 분할정복 접근법
재귀적 구조 활용해 알고리즘을 설계하는 기법 중 하나
분할 정복 결합
문제를
작은 부분
문제들로 분할
부분 문제들을
재귀적으로 해결.
* 문제가 충분히
작을 경우, 직접 해결
찾은 해들을
결합해
원래 문제의
해답 도출
재귀 대상: 문제가 충분히 커서 재귀적으로 풀 수 있는 상태
Base case: 부분 문제가 충분히 작아져 재귀 호출을 할 수 없는 상태
3. 예시2. 최대 부분 수열 문제의 분할 정복
수열을 mid를 기준으로 둘로 나누었을 때,
최대 부분 수열은
1. 앞에 있거나
2. 뒤에 있거나
3. 중간에 걸쳐있거나
A[mid] 를 무조건 포함한다.
A[i..mid]가 최대인 i를 찾고
A[mid+1..j]가 최대인 j를 찾아
합치면 된다.
4. 중간에 걸친 최대 부분 수열 찾기
Mid 에서 low로 향하며 i찾기
Mid+1 에서 high로 향하며 j찾기
둘을 합친 값 리턴
5. 예시2. 최대 부분 수열 문제의 분할 정복
원소가 하나만 남았을 경우,
최대부분 수열은 자기 자신
오른쪽의 최대 부분 수열 찾기
(재귀호출)
왼쪽의 최대 부분 수열 찾기
(재귀호출)
중간에 걸친 최대 부분 수열 찾기
O(n)
3개의 결과 중 최대값 찾기