矩阵连乘

3人阅读 评论(0) 收藏 举报
分类:

这个地方要注意动态数组的初始化:

下面是代码,有两种动态数组的初始化方式

#include<iostream>
#include<cstdlib>
using namespace std;
void MatrixChain(int *p,int n,int * *m,int * *s)
{
	for(int i = 1;i <= n;i++)
	m[i][i] = 0;
	for(int r = 2;r <= n;r++)
	for(int i = 1;i <= n - r + 1;i++)
	{
		int j = i + r - 1;
		m[i][j] = m[i + 1][j] +p[i - 1] * p[i] *p[j];
		s[i][j] = i;
		for(int k = i + 1;k < j;k++)
		{
			int t = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] *p[j];
			if(t < m[i][j])
			{
				m[i][j] = t;
				s[i][j] = k;
			}
		}
	}
	cout <<"最少数乘次数为:" << m[1][n] << endl;
}
void Traceback(int i,int j,int **s)
{
	if(i == j)
	return ;
	Traceback(i,s[i][j],s);
	Traceback(s[i][j] + 1,j,s);
	cout << "Multiply A" << i << "," << s[i][j];
	cout << "and A" << (s[i][j] + 1) << "," << j << endl;
}
int main()
{
	int n;
	cin >> n;
	int list[n + 1];
    /*int** m = new int*[n+1];//动态数组的初始化方式1
    m[0] = new int[(n+1)*(n+1)];
    int** s = new int*[n+1];
    s[0] = new int[(n+1)*(n+1)];
    for(int i = 1; i < n+1; i ++)
    {
        m[i] = m[i-1] + n+1;
        s[i] = s[i-1] + n+1;
    }*/
    int **s = new int *[n + 1];//动态数组的初始化方式二
    int **m = new int *[n + 1];
    for(int i=0;i< n + 1;i++)
    {
        s[i] = new int[n + 1];
        m[i] = new int[n + 1];
    }
	for(int i = 0;i < n + 1;i++)
	cin >> list[i];
	if(n == 1)
	cout << "计算次数为:0" << endl;
	else
	MatrixChain(list,n,m,s);
	Traceback(1,n,s);
	return 0;
}
/*
6
30 35 15 5 10 20 25
*/

查看评论

机器学习之矩阵

购买课程后添加小助手为好友(微信ID:superaihelper)加入课程讨论群。本课程囊括了机器学习理论中所需要的和线性代数相关的所有知识。 主要有矩阵的定义、性质、运算、分解以及应用。另外,还会讲解线性空间、范数、生成子空间相关知识。
  • 2017年08月05日 13:31

动态规划经典算法之矩阵连乘问题源代码

//Dynamic Programming经典算法之矩阵连乘链问题 //Author: milo //Email: 498638441@qq.com //Date: 2011/11/16 16...
  • Challenge_C_PlusPlus
  • Challenge_C_PlusPlus
  • 2011-11-16 16:50:26
  • 5150

动态规划算法——矩阵连乘问题(java实现)

矩阵连乘问题: 求矩阵A1(5×3)、A2(3×4)、A3(4×7)、A4(7×2)、A5(2×3)和A6(3×6)连乘的最佳计算次序。  算法实现:package practice; /** * ...
  • zimou5581
  • zimou5581
  • 2016-11-05 13:29:55
  • 832

poj/hdu/zoj矩阵连乘题集+题解代码 矩阵28练

你能全都做完,你的矩阵就小成了, 1.hdu 1005 矩阵基础题  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 题解代码链接...
  • a601025382s
  • a601025382s
  • 2013-08-24 10:46:29
  • 2802

Java算法3--动态规划算法实现矩阵连乘

一、需求 1、编写用动态规划算法实现矩阵连乘的类。 2、编写一个测试类,给出矩阵链的阶,求计算该矩阵链乘积的完全加括号方式的最小代价,用二维表的形式输出各子矩阵链的最优值。 二、实现源程序 (...
  • lin434406218
  • lin434406218
  • 2016-09-29 08:36:19
  • 1014

矩阵连乘-动态规划-(只是感觉描述的清晰易懂,并不是什么新算法)

矩阵连乘-动态规划-详解 DEC 19TH, 2015 11:04 AM 动态规划法 以矩阵链ABCD为例 按照矩阵链长度递增计算最优值 矩阵链长度为1时,分别计算出...
  • huzhigenlaohu
  • huzhigenlaohu
  • 2016-08-11 15:20:05
  • 960

矩阵连乘问题详解

关于矩阵连乘问题这两天上网搜了很多资料,以下两篇博客帮我弄明白了动态规划中的矩阵连乘问题,首先非常感谢两位博主,下面是两篇博客的地址,加上自己的一点补充。 crystal_yi的博客:http://b...
  • wei009965
  • wei009965
  • 2016-10-12 17:56:35
  • 802

C语言实现矩阵连乘问题

#include #include using namespace std; //矩阵连乘问题 void MatrixChain(int *p,int n,int **m,...
  • u011194993
  • u011194993
  • 2014-08-20 11:17:46
  • 1096

矩阵连乘(备忘录方法:自顶向下递归)

#include #include #include #include using namespace std; /* *矩阵连乘(备忘录方法:自顶向下递归) */ vector> m;//m[i]...
  • u011390632
  • u011390632
  • 2014-11-26 19:53:41
  • 2408

dp算法求解矩阵连乘的问题

利用动态规划算法解决矩阵连乘问题
  • qq1004642027
  • qq1004642027
  • 2015-04-24 14:33:21
  • 1827
    个人资料
    等级:
    访问量: 0
    积分: 78
    排名: 0
    文章分类
    文章存档
    最新评论