재귀 함수를 동적 프로그래밍으로 바꾸는 몇 가지 팁

강준호·2023년 3월 28일
0

알고리즘

목록 보기
9/10

문제의 겹치는 하위 문제 식별

  • 동적 프로그래밍은 문제를 겹치는 솔루션이 있는 더 작은 하위 문제로 나눌 수 있을 때 효과적!

리스트나 배열에 저장하기

  • 하위 문제의 결과를 저장하려면 리스트, 딕셔너리 또는 2D 배열을 사용한다 => 중복 계산이 방지되고 효율성이 향상

상향식 접근 방식

  • 가장 작은 하위 문제를 먼저 해결하고 for 루프를 사용하여 최종 솔루션을 구축하자
  • 이는 주요 문제에서 시작하여 더 작은 부분으로 나누는 재귀 알고리즘의 하향식 접근 방식과 반대

반복 루프

  • 재귀 호출을 중첩된 for 루프로 대체하여 리스트 및 배열을 반복한다. 루프 순서는 하위 문제가 해결되는 순서로!

피보나치를 이용한 예시

재귀 알고리즘

def fib(n):
    if n == 0 or n == 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

동적 프로그래밍

def fib_dp(n):
    if n == 0 or n == 1:
        return n

    memo = [0] * (n + 1)
    memo[0], memo[1] = 0, 1

    for i in range(2, n + 1):
        memo[i] = memo[i - 1] + memo[i - 2]

    return memo[n]

0개의 댓글