2

Halo 動的プログラミングhttp://en.wikipedia.org/wiki/Matrix_chain_multiplication#A_Dynamic_Programming_Algorithmで解決できる行列連鎖乗算を実行するコードを書くだけです

これが私が書いたコードです。これは、ウィキペディアで提供されているものよりも簡単だと思います。だから私は動的プログラミングをしているのかどうか疑問に思っていますか?

プログラムの時間の複雑さを理解できません。このプログラムの時間の複雑さを理解するのを手伝ってくれる人はいますか?

これが私の推測です.. forループは呼び出しごとにn回実行されますか? mem が使用されていない場合
、ループごとに 2 つに展開されます。

mem を使用すると、再計算が妨げられます...ああ、わかりません。誰かが私を助けてくれることを願っています:-)

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <climits>

using namespace std;

int mem[10][10];
int row[10];
int col[10];
int m[10];

#define NUM 4

int DP(int c, int r){
    if(mem[c][r] != INT_MAX) return mem[c][r];
    if(c == r) return 0;
    int min_cost;
    for(int j=c; j<r; j++){
        min_cost = DP(c, j) + DP(j+1, r) + m[c-1]*m[j]*m[r];
        if(min_cost < mem[c][r])
            mem[c][r] = min_cost;
    }
    return mem[c][r];
}

int main(){
    for(int i=0; i< 10;i++){
        for(int j=0; j<10;j++){
            mem[i][j] = INT_MAX;
        }
    }
    int n = NUM; // MAX 4 matrix
    int a,b;
    for(int i=0; i< NUM+1; i++){
        cin >> a;
        m[i] = a;
    }

    cout << "Lowest Cost for matrix multiplicatoin " << DP(1,NUM);
}
4

1 に答える 1