[python] 동적 계획법
동적 계획법은 다음과 같은 특징을 가지고 있습니다.
- 문제를 부분 문제로 분할하여 해결합니다.
- 중복되는 부분 문제들이 발생합니다.
- 부분 문제의 해결 결과를 저장하여 재활용합니다.
이 알고리즘은 다양한 문제에 적용될 수 있습니다. 예를 들어, 피보나치 수열을 구하는 문제를 동적 계획법을 사용하여 해결할 수 있습니다. 피보나치 수열은 이전 두 개의 수의 합으로 이루어지는 수열로, 재귀적인 접근 방식은 오버헤드가 발생하므로 동적 계획법을 사용하여 효율적으로 풀 수 있습니다.
다음은 파이썬으로 피보나치 수열을 구하는 동적 계획법 코드의 예시입니다:
def fibonacci(n):
cache = [0] * (n + 1)
cache[1] = 1
for i in range(2, n + 1):
cache[i] = cache[i - 1] + cache[i - 2]
return cache[n]
위 코드에서 cache
라는 리스트를 이용하여 중복 계산을 피하고, 이전에 구한 값을 재활용하여 피보나치 수열을 구합니다. 이를 통해 실행 시간을 크게 줄일 수 있습니다.
동적 계획법은 복잡한 문제를 간단한 부분 문제로 분할하여 해결하는 효과적인 알고리즘 설계 기법입니다. 이를 통해 더 효율적인 알고리즘을 구현할 수 있으며, 다양한 문제에 유용하게 적용할 수 있습니다.
참고 문헌:
- 동적 계획법(Dynamic Programming) - 위키피디아, https://ko.wikipedia.org/wiki/동적_계획법
- Dynamic Programming - GeeksforGeeks, https://www.geeksforgeeks.org/dynamic-programming/