最优矩阵链乘(动态规划)
一个n*m的矩阵由n行m列共n*m排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个n*m的矩阵乘m*p的矩阵,运算量为n*m*p。
矩阵乘法不满足分配律,但满足结合律。因此A*B*C既可以按顺序(A*B)*C也可以按A*(B*C)来进行。假设A、B、C分别是2*3、3*4、4*5的,则(A*B)*C运算量是2*3*4+2*4*5=64,A*(B*C)的运算量是3*4*5*2*3*5=90.显然第一种顺序节省运算量。
给出n个矩阵组成的序列,设计一种方法把他们依次乘起来,使得总的运算量尽量小。假设第i个矩阵A[i]是P[i-1]*P[i]的。
输入
3
2 3 4 5
输出
64
用f(i,j)表示A[i]、A[i+1]...A[j]乘起来的最少运算数
状态转移方程
f(i,j)=min{ f(i,j), f(i,k) + f(k+1,j) + P[i-1]*P[k]*P[j] }(i=<k<j)
1 #include<stdio.h> 2 int min(int a,int b) 3 { 4 return a<b?a:b; 5 } 6 int main() 7 { 8 int n,p[105],f[105][105]; 9 while(scanf("%d",&n)&&n) 10 { 11 int i,j,k; 12 for(i=0;i<=n;i++)scanf("%d",&p[i]); 13 for(i=1;i<=n;i++) 14 { 15 for(j=0;j<=n;j++)f[i][j]=1<<30; 16 f[i][i]=0; 17 f[i][i+1]=p[i-1]*p[i]*p[i+1]; 18 } 19 for(k=2;k<=n;k++) 20 for(i=1;i<=n-k;i++) 21 for(j=0;j<k;j++) 22 f[i][i+k]=min((f[i][i+j]+f[i+j+1][i+k]+p[i-1]*p[i+j]*p[i+k]),(f[i][i+k])); 23 printf("%d\n",f[1][n]); 24 } 25 return 0; 26 }
转载于:https://www.cnblogs.com/gj-Acit/archive/2013/05/03/3055728.html
最优矩阵链乘(动态规划)相关推荐
- 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)
最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...
- DP——最优矩阵链乘最优三角剖分
最优矩阵链乘: 一个n*m的矩阵乘一个m*p的矩阵等于一个n*p的矩阵,运算量为mnp,现在有一组n个矩阵组成的序列,求运算量的最小值. 这是DP中的最优矩阵链乘问题,我们可以这么理解:用一个d[i] ...
- 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...
矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...
- 【算法分析与设计】矩阵链乘法最优顺序问题
矩阵链乘法 矩阵连乘,选择不同的乘法顺序,效率可能千差万别. 高效的实现算法应该用动态规划来设计,具体的讲解可以看这里. 编程实现 public class Main {private static ...
- 以空间换时间——动态规划算法及其应用:矩阵链相乘
动态规划算法是5大算法基础中最重要的一个,它专门用来解决平面世界下的应用,即会多次使用二维数组. 当然动态规划算法是空间换时间的算法,也就是说:我们可以利用空间资源来使某算法问题的时间复杂度降到最低. ...
- 【动态规划】矩阵链乘法
矩阵链乘法 求解矩阵链相乘问题时动态规划算法的另一个例子.给定一个n个矩阵的序列(矩阵链)<A1,A2,...,An>,我们希望计算它们的乘积 A1A2...An 为了计算表 ...
- 动态规划典型题之——矩阵链乘法
动态规划是算法分析与设计中一种重要的算法.其核心思想是将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法. 文章目录 一.矩阵链相乘问题 二.求解 1.构建备忘录 2.回溯 结果展示 一.矩 ...
- 动态规划——矩阵链相乘
如果看过我上一篇文章(动态规划--最长公共子序列)的同学,相信已经对动态规划的思想有了一定的了解和认识,即把之前求解得出的子问题存储起来,以便后续求解大问题直接使用. 本章要讲解的问题是矩阵链相乘.因 ...
- 动态规划:矩阵链连乘问题
动态规划之矩阵连乘问题 矩阵链乘问题简单而言,便是给定n个矩阵{A1,A2--An},其中Ai与Ai+1是可乘的,考察其连乘时进行计算的最小次数. 在计算过程中,不同的加括号方式对于整个计算量有不一样 ...
- 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)
矩阵链相乘{\color{Cyan} 矩阵链相乘 }矩阵链相乘 Description Input n表示矩阵的个数(<=100) n+1个数,表示矩阵(<=100) Output 最小的 ...
最新文章
- spring boot 应用设置session path_kubernetes configmap 热更新spring-boot应用
- Java中break、Continue、reutrn总结
- linux编程综合案例
- python字符串split_「干货」Python字符串中的split方法
- mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据
- linux 知识点 随笔
- kubernetes对象之deployment
- Error:The module 'app' is an Android project without build variants, and cannot be built.
- Java好还是Python好?一张图告诉你!
- angular中利用zone避归没必要的开销提高程序的性能demo
- 在树莓派上搭建gitea
- Tachyon:Spark生态系统中的分布式内存文件系统的使用
- Xcode12 在Segue下切换视图时不充满屏幕的问题
- k线形态python_Python量化分析之K线模式识别
- clustalw序列比对_你还在用ClustalW做多序列比对?OUT了
- 笔记本“电源已接通,未充电”的解决办法 win7
- 示波器测量的波形一直抖动怎么办
- matlab复数fft,第30章 复数FFT的实现
- mysql怎么命令查看表的数据_查看MySQL数据库表的命令介绍
- Python中squeeze函数用法
热门文章
- STLC++(队列queue、栈stack、set\multiset 的用法)
- excel通配符?和*的使用——用于查找
- python解析GF1卫星数据.xml文件
- 项目:聊天室思路(linux下实现,语言:C/C++)
- Python基础语法-04-生成器,迭代器
- Mybatis-04-结果集映射resultMap/动态SQL/关联查询
- mysql 表数据压缩_mysql表数据压缩
- IT已成为最疯狂的加班行业,没有之一
- c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
- Vue.use 写多个_西双版纳能写立项报告收费公司