동적 계획법(Dynamic Programming, DP), 분할 정복(Divide and Conquer)의 차이와 정의
1. 정의 및 특징
1) 분할 정복(Divide and Conquer)
정의: 상위 문제를 나눌 수 없을 때까지 분할하여 각 하위 문제를 풀고 다시 합병하여 상위 문제의 답을 얻는 방식의 알고리즘이다.
특징
- 하향식 접근법: 상위 문제의 답을 구하기 위해, 아래로 내려가면서 하위의 해답을 구하는 방식. 즉, 상위 문제의 답을 구하기 위해 이전에 수행해야 하는 절차를 수행하는 방식이다.(재귀함수로 구현)
- 문제를 쪼갤 때, 부분 문제의 중복이 없다.
예: 병합 정렬, 퀵 정렬 등
1) 동적 계획법(Dynamic Programming, DP)
정의: 하나의 큰 문제를 해결하기 위해, 큰 문제를 작은 문제들로 나누어 부분적으로 해결한 후 그로부터 파생된 값인 해를 이용하여 최종적으로 전체 문제를 해결하는 방식의 알고리즘이다.
특징
- 가장 최하위 문제의 해답을 구한 후, 이를 이용하여 상위 문제를 풀어나가는 방식인 상향식 접근법이다.
- 큰 문제를 작게 쪼개어 문제를 해결할 때 중복되는 부분이 발생한다면 사용한다.
- 동일한 연산에 대해서는 1번의 연산을 수행하여 저장하여 계산의 중복을 방지한다.
- 중복을 방지하여 전체적인 수행 및 연산시간을 절약하여 실행 속도를 빠르게 한다.
- 메모이제이션(memoization)을 사용한다.
2023.06.13 - [개발 용어 정리] - [알고리즘] 메모이제이션(memoization)
[알고리즘] 메모이제이션(memoization)
메모이제이션(memoization) 이란? 1. 동적 프로그래밍(DP: Dynamic Programing)의 핵심이 되는 기술이다. 2. 동일한 계산을 반복해야 할 경우 한 번 계산한 결과를 메모리에 저장해 두었다가 재사용하여 중
kfdd6630.tistory.com
- 타뷸레이션(Tabulation)을 사용한다.
2023.06.17 - [개발 용어 정리] - [알고리즘] 타뷸레이션(Tabulation)
[알고리즘] 타뷸레이션(Tabulation)
타뷸레이션(Tabulation)의 정의와 메모이제이션(Memoization)과의 차이 타뷸레이션(Tabulation)이란? 1. 동일한 계산을 반복해야 할 경우 한 번 계산한 결과를 메모리에 저장해 두었다가 재사용하여 중복
kfdd6630.tistory.com
- 메모이제이션, 타뷸레이션을 사용하지않은 경우의 시간 복잡도: O(n*n)
- 메모이제이션을 사용할 경우 시간 복잡도: O(n)
- 타뷸레이션을 사용할 경우 시간 복잡도: O(1)
예: 피보나치 수열, 팩토리얼 등
2. 동적 계획법과 분할 정복의 공통점과 차이점
공통점: 큰 문제를 작게 쪼개어 가장 작은 단위로 분할하여 문제를 해결한다.
차이점
- 동적 계획법: 부분 문제에 중복이 발생할 경우 상위문제 해결 시 재활용하는 memoization을 사용한다.
- 분할 정복: 부분 문제에 중복이 존재하지 않아 memoization을 사용하지 않는다.
- 부분 문제에 중복이 발생할 경우 동적 계획법을 사용하고 발생하지 않는 경우 분할 정복을 사용한다.
'개발 용어 정리' 카테고리의 다른 글
[개발용어] Framework vs Platform (0) | 2024.08.03 |
---|---|
[알고리즘] 타뷸레이션(Tabulation) (0) | 2023.06.17 |
[알고리즘] 재귀(recursion), 재귀함수(recursive function) (0) | 2023.06.16 |
[알고리즘] 에라토스테네스의 체 (0) | 2023.06.14 |
[알고리즘] 메모이제이션(memoization) (0) | 2023.06.13 |
댓글