#include

#include

#include

#include

using namespace std;

/*

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

*/

vector> m;//m[i][j]表示矩阵Ai连乘到Aj的最少运算次数

vector> s;//s[i][j]记录矩阵Ai和矩阵Aj之间的分割点

//计算该连乘式子的最佳结合方式

int MatrixChain(vector& p,int beg, int end)

{

if(m[beg][end]>0) return m[beg][end];

if(beg==end) return 0;

int u = MatrixChain(p,beg,beg)+MatrixChain(p,beg+1,end)+p[beg-1]*p[beg]*p[end];

s[beg][end] = beg;

for (int K = beg+1; K

{

int t = MatrixChain(p,beg,K) + MatrixChain(p,K+1,end) + p[beg-1]*p[K]*p[end];

if (t

{

u = t;s[beg][end] = K;

}

}

m[beg][end] = u;

return u;

}

//输出该连乘式子的最佳结合方式

void PrintMatrixChain(int n,int m)

{

if(n==m)

{

cout<

return;

}

int k = s[n][m];

if(n==k)

PrintMatrixChain(n,k);

else

{

cout<

PrintMatrixChain(n,k);

cout<

}

if(k+1==m)

PrintMatrixChain(k+1,m);

else

{

cout<

PrintMatrixChain(k+1,m);

cout<

}

}

int main()

{

vector vec;

copy(istream_iterator(cin),istream_iterator(),back_inserter(vec));

int n = vec.size()-1;//一共有n个矩阵相乘

m = vector>(n+1,vector(n+1,0));//0行0列空余

s = vector>(n+1,vector(n+1,0));//0行0列空余

//初始化m数组

for(int i = 0;i<=n;i++) m[i][i] = 0;

int u = MatrixChain(vec,1,n);

cout<

PrintMatrixChain(1,vec.size()-1);

}

矩阵连乘备忘录算法java_矩阵连乘(备忘录方法:自顶向下递归)相关推荐

  1. matlab中服从高斯分布的矩阵_推荐基础算法之矩阵分解PMF

    推荐基础算法之矩阵分解PMF 大多数存在的协同过滤算法不能处理以下两种情况: 1. 不能处理大规模数据 2.不能处理评分非常少的用户数据 概率矩阵分解模型可以解决大规模.稀疏且不平衡的数据.这篇文章主 ...

  2. 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...

  3. 矩阵相乘的strassen算法_4-2.矩阵乘法的Strassen算法详解

    题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...

  4. 将一个一维数组转化为二进制表示矩阵。例如_算法之矩阵最大区域问题

    例如:给定一个m*m(0<n)的矩阵,请找到此矩阵的一个子矩阵,并且此子矩阵的各个元素的和最大,输出这个最大的值.或者给出一个柱形矩阵求最大子矩阵的最大值. 首先我们需要了解一下最大字段和问题. ...

  5. 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)

    二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树的所有节点,使得每个节点被访问且只访问一次. 而一般有四种遍历方法: 前序.中序.后序.层序,下面就分别讲一下四个遍历的思路以及代码实现 例如我 ...

  6. 矩阵连乘——动态规划算法

    矩阵连乘--动态规划算法 目录 矩阵连乘--动态规划算法 预备知识 前言 问题 应用动态规划方法的步骤 按照步骤分析问题 步骤1:最有括号化方案的结构特征 步骤2:一个递归求解方案 步骤3:计算最优代 ...

  7. 矩阵连乘问题算法思想_动态规划-矩阵连乘问题(一)

    动态规划的理论性和实践性都比较强,一方面需要理解状态.状态转移.最优子结构.重叠子问题等概念,另一方面又需要根据题目的条件灵活设计算法. 动态规划是一种用途很广的问题求解方法.它本身并不是一个特定的算 ...

  8. strassen矩阵乘法 java_矩阵乘法Strassen算法

    矩阵乘法是种极其耗时的运算.以 为例,其中 和 都是 矩阵.根据矩阵乘法的定义, 中的每个元素需要按照如下方式计算 式(4.8)包含一个 次的循环,因此计算 的时间复杂度为 .而 共有 个元素,因此总 ...

  9. 三元组法矩阵加法java_计算机视觉学习笔记(2.1)-KNN算法中距离矩阵的计算

    本笔记系列以斯坦福大学CS231N课程为大纲,海豚浏览器每周组织一次授课和习题答疑.具体时间地点请见微信公众号黑斑马团队(zero_zebra)和QQ群(142961883)发布.同时课程通过腾讯课堂 ...

  10. 【史上最详细】动态规划:矩阵连乘问题(C++实现,含备忘录方法)

    动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...

最新文章

  1. 三级结构_kegg pathway三级层级结构转对应表格
  2. Bootstrap3 表格-带边框的表格
  3. 【跟网上的大多数不一样】rstudio plot不显示图片了
  4. 《如何像证券交易员一样思考和行动》_学习笔记
  5. JDK synchronized的实现细节
  6. hasLayout属性
  7. C# FileSystemWatcher文件监控实例
  8. 数学中的物理、几何概念与含义
  9. dede所有目录模板全解
  10. 计算机常年开机,电脑长时间开机的危害
  11. 三大特殊类(String Object 包装类)与异常
  12. 37Java流程控制-打印三角形及debug练习
  13. Python编程初学者指南——有所思
  14. ES Elasticsearch
  15. 五种蓝牙耳机,到底谁才是你的菜
  16. cerr与cout心得
  17. Lumaqq移植到Android 之进阶篇
  18. 邮箱地址注册,163邮箱登陆登录入口在哪里?
  19. Xampp下载及使用
  20. 爬虫实践---抓取百度贴吧

热门文章

  1. 【水果识别】基于matlab GUI柑橘质量检测及分级系统(带面板)【含Matlab源码 1628期】
  2. 【优化预测】基于matlab差分进化算法优化BP神经网络预测【含Matlab源码 1315期】
  3. 【印刷字符识别】基于matlab OCR键盘数字+字母识别【含Matlab源码 807期】
  4. 【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】
  5. 【图像几何】基于matlab投影法测距【含Matlab源码 405期】
  6. 【基础教程】基于matlab疫情防护动图制作【含Matlab源码 028期】
  7. 10寸 nuc972_新唐ARM9之NUC972学习历程之系统的搭建和BSP包的使用
  8. python3自动化软件发布系统_PythonPC客户端自动化实现原理(pywinauto)
  9. js打印线程id_理解Python多线程:通过易懂的小例子展开第一篇
  10. append追加的html中富文本失效,jquery append 动态添加的元素事件on 不起作用的解决方案...