DP 矩陣連乘

2021-07-07 01:29:40 字數 826 閱讀 5591

問題:給定n個矩陣,求乘法次數的最小值

1)最優子結構:

乙個簡單的解決辦法是把括號放在所有可能的地方,計算每個位置的成本,並返回最小值。對於乙個長度為n的鏈,我們有n-1種方法放置第一組括號。

例如,如果給定的鏈是4個矩陣。讓矩陣連為abcd,則有3種方式放第一組括號:a(bcd),(ab)cd和(abc)d。

所以,當我們把一組括號,我們把問題分解成更小的尺寸的子問題。因此,這個問題具有最優子結構性質,可以使用遞迴容易解決。

2)重疊子問題

以下是遞迴的實現,只需用到上面的最優子結構性質

#include #include #include #include using namespace std;

const int maxn = 50;

int p[maxn], d[maxn][maxn];

int chain(int i, int j)

{ if(i == j) return 0;

if(d[i][j] > 0) return d[i][j];

int ans = 0x3f3f3f3f;

for(int k=i; k

實際上是把矩陣乘法區間拆分,下面是迭**法:這裡只給出dp函式部分,其餘同上

int chain(int n)

{ for(int div=2; div<=n; div++) {

for(int i=1; i<=n-div+2; i++) {

int j = i + div - 1;

d[i][j] = 0x3f3f3f3f;

for(int k=i; k

矩陣連乘DP

矩陣相乘的條件 a1 a2 a1 x,y a2 y,z a3 x,z a1的列數數等於a2的行數 運算次數為x y z 對於a1,a2,an個矩陣,a1 a2 a3 a4 an 我們可以用結合律 也就是新增括號,使整個運算過程運算次數最少 演算法效率最高。維數分別為10 100 100 5 5 50...

矩陣連乘問題(dp)

題目 計算矩陣連乘積a1,a2,an,其中ai的維度為p i 1 p i 輸入規模n,p 0 p n 輸出最少乘的次數和斷點處也就是乘法順序。思路 區間dp,m i j 表示從ai到aj區間內的最少乘的次數,列舉k i用s i j 記錄每次最少次數的時候是在哪個地方斷開,即k的位置。詳見 inclu...

DP基礎 矩陣連乘

dp基礎 矩陣連乘 description 矩陣乘法是線性代數中最基礎的乙個知識點,設矩陣a為乙個n行m列的矩陣,矩陣b為x行y列,那麼a能乘b的條件為m x,它們相乘將得出乙個n行y列的矩陣,進行一次矩陣乘法的運算次數為n m y,現在給出k個矩陣,你每次可以合併相鄰的兩個矩陣,將它們做乘法得出的...