ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘 ch10 Dynamic Programming
    학교 수업/알고리즘 2020. 6. 15. 19:29

    Dynamic Programming

    - 큰 문제를 작은 문제로 나눠서 푸는 문제

    - Optimization problem 푸는 방법 중 하나이다.


      * divide and conquer과 다른점 : 메모리를 이용해 중복 계산을 하지 않는다.


    - 풀이 과정

     ① 문제 특성을 파악

     ② 점화식 정의

     ③ 점화식대로 계산 수행


    - 두가지 방식으로 나뉨

     1) Top-down 방식 : recursion -> memoization

     2) Bottom-up 방식 : Loop


    - dp로 풀수있는 optimization problem 

      예시)

     Matrix-Chain Multiplication problem : 두 개 이상의 행렬의 순서가 주어질 때 행렬의 곱셈에서 곱셈 연산의 수를 최소화하는 방법을 찾는 것


    행렬의 곱 ABCD 에 대해 행렬은 결합법칙이 성립하므로
    ((AB)C)D=((A(BC))D)=(AB)(CD)=A((BC)D)가 성립한다. 
    이때 각각의 연산마다의 곱셈 연산의 횟수는 다르므로 이중에서 최소 연산 횟수를 가지는 방법을 찾아야 한다.

    예를 들어 A=1030,B=305,C=560 의 크기를 가지는 행렬의 곱셈을 진행 할때
    (AB)C=(10305)+(10560)=1500+3000=4500(count of operations)
    A(BC)=(30560)+(103060)=9000+18000=27000(count of operations)
    위처럼 괄호의 위치마다 연산의횟수는 크게 차이가 나기때문에 최적의 방법을 찾아내는것이 중요하다.


    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

    댓글

Designed by Tistory.