动态规划之——矩阵链乘法
来源:互联网 发布:淘宝一键安装模板 编辑:程序博客网 时间:2024/05/18 11:27
在《算法导论》第二版中,(P197),关于动态规划的算法,这个动态规划解决的是矩阵链乘法的加括号的问题。给定由n个要相乘的矩阵构成的序列,要计算乘积
最小的相乘次数。算法与《装配线调度》有一些不同点。每一个状态m[i][j]的值不是仅与前两个有关,而是与1~n的值都有关。所以前面所有的值在求最终的值时都会被用到。算法导论中的矩阵看起来真是难受,这个也是因人而异吧,倒过来的矩阵总是看起来怪怪的,还是自己画原始的图看起来舒服。但是作者的意图是为了让人感受到这里面递归和迭代的过程。
我们都是先求数组坐标 (0,1) 然后再求:(0,2) (0,3) (0,4) (0,5)
(1,2) (1,3) (1,4) (1,5)
(2,3) (2,4) (2,5)
(3,4) (3,5)
(4,5)
这样可以看出:每个行都是从零开始,每个列都是依次递增。所以这样可以组织代码:
#include "stdafx.h"#include <iostream>using namespace std;int const NUM_MTRIX = 6; //矩阵的数量void printArray( int arr[], int length ){for ( int i = 0; i < length; ++i ){cout<<arr[i]<<" ";}cout<<endl;}int _tmain(int argc, _TCHAR *argv[]){int P[7] = { 30, 35, 15, 5, 10, 20, 25 };int min[NUM_MTRIX][NUM_MTRIX];for ( int i = 0; i < NUM_MTRIX; ++i ){min[i][i] = 0; //将对角线元素全部赋值为0}for ( int col = 1; col < NUM_MTRIX; ++ col ){int row = 0;for ( int tmpCol = col; tmpCol < NUM_MTRIX ; tmpCol++ ){min[row][tmpCol] = INT_MAX; for ( int k = row; k < tmpCol; ++k){int tmpMin = min[row][k] + min[ k +1 ][tmpCol] + P[ row ]* P[ k +1 ]*P[ tmpCol +1 ];if ( tmpMin < min[row][tmpCol] )min[row][tmpCol] = tmpMin;} ++row;}}cout<<min[0][5]<<endl;}
- 动态规划之——矩阵链乘法
- 动态规划——矩阵链乘法
- 动态规划——矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之 矩阵链乘法
- 动态规划算法之矩阵链乘法
- 动态规划之矩阵链乘法
- 说说动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法理解
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划—矩阵乘法排序
- 动态规划——矩阵链乘法(备忘录法)
- 矩阵链乘法——动态规划问题
- jCIFS是一个完全用Java开发的SMB客户端库
- 选择屏幕输出密码框
- 用SVN加載源碼時報錯
- Android开发之系统退出
- Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试
- 动态规划之——矩阵链乘法
- vim 中 获取当前编辑文件名
- Hibernate sql查询
- Outlook 禁止访问下列具有潜在不安全因素的附件
- PHP之Session有效期
- ALV列头合并
- LA3523——无向图的点双连通分量
- Import an Ant project into Eclipse
- CROC 2013 QR