码迷,mamicode.com
首页 > 其他好文 > 详细

2、矩阵链乘的优化

时间:2015-07-17 20:53:23      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

矩阵链乘的优化
问题产生的原因:
    技术分享
如图,对于矩阵的链乘时,我们可以采用不同的组合进行相乘
技术分享
当然不同的组合会产生不同的效率。不同的组合所产生的效率如下:
技术分享
上面表达式的意思是,对于一个从Ai?乘到A?j?的矩阵链乘运算,我们可以将问题进行划分为两个子问题如下:
从A?i 乘到Ak的效率代价加上A?k+1?到Aj?的代价,再加上(呵呵,最要的问题)它们两者的结果相乘的代价。
代码如下:
    
  1. #include"MultiPlay.h"
  2. int storePath[20][20]={0};
  3. int main(){
  4. int multiDem[7]={30,35,15,5,10,20,25};
  5. std::cout<<multiplay_iterator(multiDem,2,5)<<std::endl;
  6. printMultiPath(3,5);
  7. }
  1. #ifndef MULTIPLAY_H_
  2. #define MULTIPLAY_H_
  3. #include<iostream>
  4. #include<string>
  5. unsigned int multiplay_iterator(int *multiDem,int start,int end);
  6. void printMultiPath(int start,int end);
  7. #endif
  1. #include"MultiPlay.h"
  2. int valueStore[20][20]={0};
  3. extern int storePath[20][20];
  4. unsigned int multiplay_iterator(int *multiDem,int start,int end){
  5. if(start==end)
  6. return 0;
  7. if(valueStore[start][end]!=0)
  8. return valueStore[start][end];
  9. int multiCount=655360;
  10. for(int i=start;i<end; i++){
  11. if(multiCount>(multiplay_iterator(multiDem,start,i)+multiplay_iterator(multiDem,i+1,end)+multiDem[start-1]*multiDem[i]*multiDem[end])){
  12. storePath[start][end]=i;
  13. multiCount=multiplay_iterator(multiDem,start,i)+multiplay_iterator(multiDem,i+1,end)+multiDem[start-1]*multiDem[i]*multiDem[end];
  14. }
  15. }
  16. valueStore[start][end]=multiCount;
  17. return multiCount;
  18. }
  19. void printMultiPath(int start,int end){
  20. if(start==end)
  21. return ;
  22. if(storePath[start][end]==start||storePath[start][end]==end)
  23. return;
  24. std::cout<<"A"<<start<<" * "<<"A"<<storePath[start][end]<<std::endl;
  25. std::cout<<"A"<<storePath[start][end]+1<<" * "<<"A"<<end<<std::endl;
  26. printMultiPath(start,storePath[start][end]);
  27. printMultiPath(storePath[start][end]+1,end);
  28. }
 技术分享
?以上这个公式便使这个优化问题将原问题和子问是以及己知条件很好地联系在一起,建立起它们之间的桥梁




2、矩阵链乘的优化

标签:

原文地址:http://www.cnblogs.com/yml435/p/4655536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!