150 likes | 170 Views
Dynamic programming is a method of solving problems by breaking them into smaller sub-problems and combining the solutions. It is often used when the brute force approach is too time-consuming. This text explains the concept with an example of matrix-chain multiplication.
E N D
Dynamic Programming Carrie Williams
What is Dynamic Programming? • Method of breaking the problem into smaller, simpler sub-problems • Start with the smallest sub-problems and combine to produce a solution • Similar to Divide and Conquer • But uses a bottom-top approach
When is it used? • Most often used with Optimization Problems • When the Brute Force approach becomes too time consuming • Brute Force is when you find all possible solutions and compare them
Example:Matrix-Chain Multiplication • Given: A sequence of matrices (A1A2,…,An) with Ai having dimension mi-1 x m • Cost of a Solution: The number of operations needed to compute A1*A2*…*An • Optimal Solution: The solution with minimal cost
MCM Example • We have a matrix sequence of (90,20,15,50,180) • So we have matrices of the following sizes: • A1 = 90 x 20 • A2 = 20 x 15 • A3 = 15 x 50 • A4 = 50 x 180
MCM Example Cont. • We want to compute A1*A2*A3*A4 • 5 possible ways • (A1(A2(A3A4))) • (A1((A2A3)A4)) • ((A1A2)(A3A4)) • ((A1(A2A3))A4) • (((A1A2)A3)A4) • Recall that the number of operations needed to compute an m x n matrix with a n x p is mnp
MCM Example Cont. • We could try all possible solutions and see what solution gives us the least cost OR • We could use the method of dynamic programming • Finding the optimal solution by finding the optimal solution of sub-problems
Finding the Solution • Start with the computation of two matrices • Let M[i,j] be the cost of the optimal solution • M[i,j]=min {M[i,k] + M[k+1,j] + mi-1mkmj} i<k<j • Now we must compute M[i,j], i>1, j<n, from the bottom up
Finding the Solution cont. • Using the previous example, we need to compute M[i,j] for i>1, j<4 • M[i,i]=0, for all i • The solutions for 2 matrices are the following: • M[1,2] = 27,000 • M[2,3] = 15,000 • M[3,4] = 135,000
Computing the Cost of Three Matrices • M[1,3] = min {M[1,2] + M[3,3] + m0m2m3} {M[1,1] + M[2,3] + m0m1m3} = 27,000 + 0 + 90*15*50 = 94,500 = 0 + 15,000 + 90*20*50 = 105,000 • M[2,4] = min {M[2,3] + M[4,4] + m1m3m4} {M[2,2] + M[3,4] + m1m2m4} = 15,000 + 0 + 20*50*180 = 195,000 = 0 + 135,000 + 20*50*180 = 315,000 • Minimum for M[1,3] = 94,500 = ((A1A2)A3) • Minimum for M[2,4] = 195,000 = (A2(A3A4))
Computing the Cost of Four Matrices • M[1,4] = min {M[1,3] + M[4,4] +m0m3m4} {M[1,2] + M[3,4] + m0m2m4} {M[1,1] + M[2,4] + m0m1m4} = 94,500 + 0 + 90*50*180 = 904,000 = 27,000 + 135,000 +90*15*180=405,000 = 0 + 195,000 + 90*20*180 = 519,000 • Hence, the minimum cost is 405,000, which is ((A1A2)(A3A4))
Conclusion • We used the method of dynamic programming to solve the matrix-chain multiplication problem • We broke the problem into three sub-problems • The minimal cost of two matrices, then three matrices, and finally four matrices • We found the solution by using the sub-problem’s optimal solutions