矩阵链相乘问题 来个C#写的或C/C++写的 10

1.编写程序使用动态规划算法MATCHAIN求解n个矩阵连乘所需最找数量乘法次数,并用实际数据对算法进行测试。2.要求对算法MATCHAIN加以改进,不仅能够输出数量乘法... 1. 编写程序使用动态规划算法MATCHAIN求解n个矩阵连乘所需最找数量乘法次数,并用实际数据对算法进行测试。
2. 要求对算法MATCHAIN加以改进,不仅能够输出数量乘法次数,还要能输出最佳乘法方案,如(M1M2)((M3M4)M5)。
1. 编写函数MATCHAIN求解矩阵链相乘问题,函数头为:
int MATCHAIN(int r[], int n)
r为数组名,r[i]和r[j]分别表示矩阵Mi的行数和列数,n表示连乘矩阵的个数。
2. 在main函数中使用给定数组{4,5,3,6,4,5}测试MATCHAIN函数,效果如下图所示。

其算法伪代码如下:
1. for i←1 to n
2. C[i,j]←0
3. end for
4. for d←1 to n-1
5. for i←1 to n-d
6. j←i+d
7. C[i,j]←∞
8. for k←i+1 to j
9. C[i,j]←min{C[i,j],C[i,k-1]+C[k,j]+r[i]r[k]r[j+1]}
10. end for
11. end for
12.end for
13.return C[1,n]
展开
 我来答
风追保罗
2014-04-08 · 超过29用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:64.5万
展开全部
#include<stdio.h>
#include<stdlib.h>
#define MAXN 1000000
void Matrix_Chain_Order(int * p, int * s, int N)
{
       int n = N - 1;
       int m[N][N];
       for(int i = 1; i <= n; i++)
       {
             m[i][i] = 0;          
       }   
       for(int l = 2; l <= n; l++) /*lÊÇÁ´µÄ³¤¶È*/
       {
               for(int i = 1; i <= n - l + 1; i++)
               {
                    int j = i + l - 1;
                    m[i][j] = MAXN;       
                    int q; 
                    for(int k = i; k <= j - 1; k++)
                    {
                         q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
                         if(q < m[i][j])
                         {
                              m[i][j] = q;
                              *(s + i * N + j) = k;     
                         }           
                    }     
               }             
       }      
}

void Print_Optimal_Parens(int * s, int i, int j, int N)
{
     if(i == j)
     {
          printf("A%d",i);     
     }     
     else
     {
         printf("(");
         Print_Optimal_Parens((int *)s, i, *(s + i * N + j), N);
         Print_Optimal_Parens((int *)s,  *(s + i * N + j)+1, j, N);
         printf(")");    
     }
}

int main()
{
    int P[7] = {30,35,15,5,10,20,25};
    int S[7][7];
    Matrix_Chain_Order(P,(int *)S,7);
    Print_Optimal_Parens((int *)S,1,6,7);
    system("pause");
    return 0;    
}

这是我以前实现矩阵链相乘的算法,不符合你最终的显示,你稍微改一下就好

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式