動態規劃實現矩陣鏈乘法問題

2022-09-15 09:48:11 字數 2263 閱讀 5586

矩陣鏈乘法問題( matrix-chain multiplication problem  )

(1)問題描述

給定n個矩陣的鏈,其中i=1,2,…,n,矩陣a i的維數為pi-1 ×p i 。求乙個完全「括號化方案」,使得計算乘積a 1 a 2 …a n 所需的標量乘法次數最小

(2)最優括號化方案的結構特徵

用記號 a i,j 表示 ai a i+1 …a j 通過加括號後得到的乙個最優計算模式,且恰好在a k 與a k+1 之間分開。則「字首」子鏈ai a i+1 …a k 必是乙個最優的括號化子方案,記為a i,k ;同理「字尾」子鏈a k+1 a k+2 …aj 也必是乙個最優的括號化子方案,記為a k+1,j。

(3)乙個遞迴求解的方案

對於矩陣鏈乘法問題,我們將所有對於1≤i≤j≤n確定ai a i+1 …a j 的最小代價括號方案作為子問題。令m[i,j]表示計算矩陣a i,j 所需要的標量乘法的次數最小值,則最優解就是計算a i...n所需的最低代價就是m[1,n] 

遞迴定義m[i,j]。

①對於i=j的情況下,顯然有m=0,不需要做任何標量乘法運算。所以,對於所有的i=1、2......n,m[i,i] = 0.

②當i < j的情況,就按照最優括號化方案的結構特徵進行計算m[i,j]。假設最優括號化方案的分割點在矩陣ak和ak+1之間,那麼m的值就是ai...k和ak+1...j的代價加上兩者量程的代價的最小值。即

。該公式的假設是最優分割點是已知的,但是實際上不知道。然而,k只有j-i中情況取值。由於最優分割點k必定在i~j內取得,只需要檢查所有可能的情況,找到最優解即可。可以得出乙個遞迴公式

m只是給出了子問題最優解的代價,但是並未給出構造最優解的足夠資訊(即分割點的位置資訊)。所以,在此基礎之上,我們使用乙個二維陣列s[i,j]來儲存 ai a i+1 …a j 的分割點位置k。

(4)我們採用自底向上**方法來代替上述遞迴公式演算法來計算最優代價。過程中假定矩陣a的規模為pi-1xpi,輸入是乙個序列p=,長度為p.length = n+1.其中使用乙個輔助表m來記錄代價m[i,j],另乙個表s來記錄分割點的位置資訊,以便於構造出最優解。

簡單介紹一下演算法:首先在3~4行對所有的i=1、2......n計算m[i,i]=0。然後在5~13行中的第乙個for迴圈,使用(3)中的遞迴公式對所有的i=1~n-1計算m[i,i+1](長度為l=2的最小計算代價)的值。在第二個迴圈中,對所有的i=i~n-2計算m[i,i+2](長度為l=3的鏈的最小計算代價)的值。到最後,10~13行中計算代價m[i,j]的時候僅僅依賴於上面計算的表項m[i,k]和m[k+1,j]

(5)給乙個簡單的例子 

①給出乙個n=6的矩陣如下圖所示

②由上述表我們按照下面這樣的計算方式來得到m[i,j]所對應的表,下圖所示的**中代表的m[i,j]的最小值

③可以得到下面這樣一張表

首先將矩陣化為一張一維陣列表

④簡單結算其中的一些表項,給出乙個m[1,3]的值的計算過程如下:

可以得出上面的比較小的分割點為1,所以s[1,3] = 1。

可以得出分割點的位置為s[2,5] = 3。

上面給出了乙個簡單的兩個點的計算。下圖是計算完成的矩陣m和s

由上面表s可以得到,最優解為(a1(a2a3))((a4a5)a6)

動態規劃實現矩陣鏈乘法問題

矩陣鏈乘法問題 matrix chain multiplication problem 1 問題描述 給定n個矩陣的鏈,其中i 1,2,n,矩陣a i的維數為pi 1 p i 求乙個完全 括號化方案 使得計算乘積a 1 a 2 a n 所需的標量乘法次數最小 2 最優括號化方案的結構特徵 用記號 a...

動態規劃 矩陣鏈乘法

矩陣鏈乘法問題 給定n個矩陣的鏈,矩陣ai的規模為p i 1 p i 求完全括號化方案,使得計算乘積a1a2 an所需標量乘法次數最少。m i j 表示矩陣鏈ai j所需標量乘法次數的最小值。m i j 0 i j m i j m i k m k 1 j p i 1 p k p j i k s 1....

動態規劃 矩陣鏈乘法

兩個矩陣相乘的計算量,對於一般的矩陣乘法來說,如矩陣a m,n 與矩陣b n,p 相乘需要進行的加法次數為m n p次乘法 由於矩陣乘法滿足結合律,因此矩陣相乘的結合性,會影響整個計算表示式的乘法執行次數 如下面的例子,a b c三個矩陣相乘,其中a 10,5 b 5,20 c 20,3 1 ab ...