用動態規劃算法解決矩陣連乘問題

對一系列的矩陣進行乘法運算,求最佳的運算結合順序,使得所需的乘法總次數最少。

我們知道,矩陣連乘滿足結合律,如對於四個矩陣相乘 ABCD,有

ABCD = (ABC)D = (AB)(CD) = A(BCD) = ...

但是結合順序不同,所需要的乘法總次數也就不同,如對於三個矩陣連乘 A[10*30] * B[30*5] * C[5*60],有兩種結合順序,每種結合順序所需的乘法總次數如下:

(AB)C = (10×30×5) + (10×5×60) = 1500 + 3000 = 4500 次 A(BC) = (30×5×60) + (10×30×60) = 9000 + 18000 = 27000 次

不難看出第一種結構順序的乘法總次數比第二種的少得多。

現給定一維數組 p[],用於表示系列矩陣的行列數,第 i 個矩陣的行列數爲 p[i-1]*p[i],試編程計算所需的最少乘法總次數是多少。如

  Input: p[] = {40, 20, 30, 10, 30}   
四個矩陣的維數分別爲 40x20, 20x30, 30x10 and 10x30
  Output: 26000  
最優結合順序爲 (A(BC))D --> 20*30*10 + 40*20*10 + 40*10*30

Input: p[] = {10, 20, 30, 40, 30} 
  Output: 30000 
((AB)C)D --> 10*20*30 + 10*30*40 + 10*40*30

Input: p[] = {10, 20, 30}  
  Output: 6000  
There are only two matrices of dimensions 10x20 and 20x30. So there 
  is only one way to multiply the matrices, cost of which is 10*20*30

分析:求最優結合順序,其實就是找出最優的加括號順序。最簡單的辦法就是在所有可能的地方加括號,計算每種加括號的順序所需的乘法次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章