Tuesday, April 14, 2015

Matrix Multiplication Memoized

This is a memoized version of naive recursion.
#include
#include
using namespace std;
#define MAX 1000
int dp[MAX][MAX];
int min_cost(int A[],int n,int start,int end)
{
    if(dp[start][end]!=-1)
        return dp[start][end];
    if(start==end)
    {   dp[start][end]=0;
        return 0;
    }
    int i=A[start];
    int j= A[end+1];
    if(end-start==1)
        return i*j*A[end];
    int mini=12345678;
    for(int k=start;k    {
        mini=min(mini,min_cost(A,n,start,k)+min_cost(A,n,k+1,end)+i*A[k+1]*j);
    }
    dp[start][end]=mini;
    return mini;
}
int main()
{
    for(int i=0;i        for(int j=0;j        dp[i][j]=-1;
int A[]={30,35,15,5,10,20,25};
int n= sizeof(A)/sizeof(A[0]);
printf("Minimum number of multiplications required are:%d\n",min_cost(A,n,0,n-2));

return 0;
}

No comments:

Post a Comment