- 
                            
                            알고리즘 ch10 Dynamic Programming학교 수업/알고리즘 2020. 6. 15. 19:29Dynamic Programming - 큰 문제를 작은 문제로 나눠서 푸는 문제 - Optimization problem 푸는 방법 중 하나이다. * divide and conquer과 다른점 : 메모리를 이용해 중복 계산을 하지 않는다. - 풀이 과정 ① 문제 특성을 파악 ② 점화식 정의 ③ 점화식대로 계산 수행 - 두가지 방식으로 나뉨 1) Top-down 방식 : recursion -> memoization 2) Bottom-up 방식 : Loop - dp로 풀수있는 optimization problem 예시) Matrix-Chain Multiplication problem : 두 개 이상의 행렬의 순서가 주어질 때 행렬의 곱셈에서 곱셈 연산의 수를 최소화하는 방법을 찾는 것 행렬의 곱 ABCD 에 대해 행렬은 결합법칙이 성립하므로가 성립한다.이때 각각의 연산마다의 곱셈 연산의 횟수는 다르므로 이중에서 최소 연산 횟수를 가지는 방법을 찾아야 한다.예를 들어 의 크기를 가지는 행렬의 곱셈을 진행 할때위처럼 괄호의 위치마다 연산의횟수는 크게 차이가 나기때문에 최적의 방법을 찾아내는것이 중요하다.bottom up 방식을 이용해서 풀 것이다. 사용 점화식 M[i][j] = 행렬 i부터 j까지 행렬을 곱하는데 필요한 곱셈의 최소 횟수 시간복잡도 O(n^3) 공간복잡도 O(n^2) '학교 수업 > 알고리즘' 카테고리의 다른 글알고리즘 ch13 NP-complete Problems (0) 2020.06.16 알고리즘 ch11 String match (0) 2020.06.16 알고리즘 ch8 Greedy algotithm (0) 2020.06.15 알고리즘 ch6 (2) Red-black tree (0) 2020.06.14 알고리즘 ch 6 array doubling (0) 2020.06.14