728x90
동적 계획법은 큰 의미에서 분할 정복과 같은 접근 방식을 의미한다.
여기서 어떤 부분 문제는 같은 문제를 두 번 이상 풀 수도 있기 때문에, 이 문제에서 답을 여러 번 계산하는 대신
한번만 계산 하고 계산 결과를 저장해 놓고 재사용한다.
따라서 속도의 향상을 꾀할 수 있다.
중복되는 부분 문제
cache - 이미 계산한 값을 저쟁해 두는 메모리 장소
overlapping subproblems - 중복 되는 부분 문제
ex)
대표적인 문제 - 이항계수
조합 nCr, \( \begin{pmatrix} n \\ r \end{pmatrix} \)은 다음과 같은 성질이 있다.
메모이제이션
memoization - 한 번 계산한 값을 저장해 두었다가 재활용하는 최적화 기법
위와 같은 이항계수 문제를 일반적인 재귀함수로 풀면,
함수호출이 2의 n승으로 불어난다.
하지만, 한 번 계산한 값을 배열에 저장해두고, 그 계산을 반복하지 않게 하면서 이전에 저장한 값을 이용한다면,
n의 제곱꼴로 증가하게 되어, 함수 호출을 줄일 수 있다.
728x90
'알고리즘, 자료구조 > 알고리즘 개념' 카테고리의 다른 글
[Sort] 대표적인 정렬의 모든 것 (0) | 2019.08.31 |
---|---|
[KMP] 문자열 알고리즘 (0) | 2019.08.30 |
16. 비트마스크 (bitmask) (0) | 2019.08.12 |
6. 브루트포스(brute-force) part 2 (0) | 2019.07.15 |
6. 브루트포스(brute-force) part 1 (0) | 2019.07.14 |
댓글