다이나믹 프로그래밍은 메모리 공간을 약간 더 사용함으로써 연산 속도를 비약적으로 증가시킬 수 있는 알고리즘이다.
다만 항상 다이나믹 프로그래밍을 사용할 수 있는 것은 아니고, 아래의 조건을 만족시킬 때 사용할 수 있다.
- 큰 문제를 작은 문제로 나눌 수 있다.
- 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다.
위의 조건은 대부분 점화식 형태를 가지고 있기 때문에 다이나믹 프로그래밍인 것 같다면 문제에 알맞는 점화식을
떠올리는 것이 좋은 방법이다.
메모이제이션
메모이제이션은 다이나믹 프로그래밍을 구현하는 방법 중 하나로, 한 번 구한 결과를 메모리 공간에 메모해두고,
같은 식을 호출하면 메모한 결과를 그대로 가져오는 기법이다.
탑다운과 보텀업
탑다운 방식: 재귀 함수를 이용하여 큰 문제를 해결하기 위해 작은 문제를 호출 ex) 메모이제이션
보텀업 방식: 단순히 반복문을 이용하여 작은 문제부터 차근차근 답을 도출 ex) 반복문
다이나믹 프로그래밍에서 사용하는 방식은 대부분 DP 테이블을 이용한 보텀업 방식이다.
재귀 함수 깊이와 관련한 에러가 발생할 수 있기 때문에 가능하다면 탑다운 방식보다는 보텀업 방식을 사용하는 것을 권장한다.
=> 핵심: 다음 과정을 위한 전까지의 과정을 정리한 점화식을 생각하고, 메모이제이션 or 보텀업 방식으로 구현
반응형
'알고리즘' 카테고리의 다른 글
최단 경로 벨만 포드 (0) | 2022.05.13 |
---|---|
최단 경로 다익스트라/플로이드 워셜 (0) | 2022.05.09 |
범위를 반씩 좁혀가는 이진탐색 (0) | 2022.04.21 |
기준에 따라 데이터를 정렬 (0) | 2022.04.18 |
탐색 알고리즘 DFS/BFS (0) | 2022.04.15 |