동적계획법(DP)

동동·2023년 4월 4일
0

알고리즘 공부

목록 보기
23/23
post-thumbnail

동적계획법(DP)

  • 동적 계획법은 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법

동적 계획법의 핵심 이론

🌸 동적 계획법의 원리와 구현 방식
  1. 큰 문제를 작은 문제로 나눌 수 있어야 한다.
  2. 작은 문제들이 반복돼 나타나고 사용되며 이 작은 문제들의 결괏값은 항상 같아야 한다.
  3. 모든 작은 문제들은 한 번만 계산에 DP 테이블에 저장하며 추후 재사용할 때는 이 DP 테이블을 이용한다. 이를 메모이제이션 기법이라고 한다.
  4. 동적 계획법은 톱-다운 방식과 바텀-업 방식으로 구현할 수 있다.

동적 계획법의 가장 대표적인 문제인 피보나치 수열을 예로 들어보자.

🌸 피보나치 수열 공식
D[N] = D[N - 1] + D[N - 2] // N번째 수열 = N - 1번째 수열 + N - 2번째 수열

1. 동적 계획법으로 풀 수 있는지 확인하기

  • 6번째 피보나치 수열은 5번째 피보나치 수열과 4번째 피보나치 수열의 합이다.
  • 즉, 6번째 피보나치 수열을 구하는 문제는 5번째 피보나치 수열과 4번째 피보나치 수열을 구하는 작은 문제로 나눌 수 있고, 수열의 값은 항상 같기 때문에 DP로 풀 수 있다.

2. 점화식 세우기

  • 점화식을 세울 때는 논리적으로 전체 문제를 나누고, 전체 문제와 부분 문제 간의 인과 관계를 파악하는 훈련이 필요하다.
  • 피보나치 수열의 공식 자체가 점화식이므로 이 예제에서는 공식을 점화식으로 사용한다.

점화식 : D[i] = D[i-1] + D[i-2]

3. 메모이제이션 원리 이해하기

  • 메모이제이션은 부분 문제를 풀었을 때 이 문제를 DP 테이블에 저장해 놓고 다음에 같은 문제가 나왔을 때 재계산하지 않고 DP 테이블의 값을 이용하는 것을 말한다.

4. 톱-다운 구현 방식 이해하기

  • 톱-다운 구현 방식은 말 그대로 위에서부터 문제를 파악해 내려오는 방식으로, 주로 재귀 함수 형태로 코드를 구현한다.
  • 코드의 가독성이 좋고, 이해하기가 편하다는 장점이 있다.

5. 바텀-업 구현 방식 이해하기

  • 가장 작은 부분 문제부터 문제를 해결하면서 점점 큰 문제로 확장해 나가는 방식
  • 주로 반복문의 형태로 구현

출처 - 하루코딩

profile
알고리즘 문제를 주로 업로드합니다.

0개의 댓글