그리디 알고리즘과 동적 계획법(Dynamic Programming, DP)은 최적화 문제를 해결하기 위한 대표적인 전략들이다. 두 방법은 문제를 해결하는 접근 방식에서 근본적인 차이를 가진다.
정의: 그리디 알고리즘은 매 선택에서 가장 최적이라고 생각되는 것을 선택해 나가는 방식이다. 이 방식은 전체를 고려하지 않고, 각 단계에서의 최선의 해결책만을 추구한다.
특징:
적용 사례: 화폐 거스름돈 문제, 최소 신장 트리(Minimum Spanning Tree), 크루스칼(Kruskal) 알고리즘, 프림(Prim) 알고리즘 등
정의: 동적 계획법은 복잡한 문제를 재귀적으로 분할하여, 작은 문제의 답을 메모리에 저장함으로써 중복 계산을 줄이는 방식이다. 이 방식은 각 하위 문제의 해결책을 기반으로 전체 문제의 최적 해결책을 구한다.
특징:
적용 사례: 피보나치 수열, 배낭 문제(Knapsack Problem), 최장 공통 부분 수열(Longest Common Subsequence), 최단 경로 찾기(Dijkstra's Algorithm) 등
접근 방식:
효율성:
사용 사례: 그리디 알고리즘은 문제마다 그 적용 가능 여부를 분석해야 하며, 동적 계획법은 메모리를 추가로 사용하여 넓은 범위의 문제에 대한 최적의 해를 찾는 데 적합하다.
그리디 알고리즘과 동적 계획법은 각각의 문제에 대해 적절한 해결 방법을 선택하여 사용해야 한다. 그리디 알고리즘은 구현이 간단하고 빠르게 해를 찾을 수 있는 반면, 동적 계획법은 보다 복잡한 문제에 대해 최적의 해를 찾는 데 유리하다.