zoukankan      html  css  js  c++  java
  • 2、矩阵链乘的优化

    矩阵链乘的优化
    问题产生的原因:
        
    如图,对于矩阵的链乘时,我们可以采用不同的组合进行相乘

    当然不同的组合会产生不同的效率。不同的组合所产生的效率如下:

    上面表达式的意思是,对于一个从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. }
     
    以上这个公式便使这个优化问题将原问题和子问是以及己知条件很好地联系在一起,建立起它们之间的桥梁




  • 相关阅读:
    PAT Advanced 1067 Sort with Swap(0, i) (25分)
    PAT Advanced 1048 Find Coins (25分)
    PAT Advanced 1060 Are They Equal (25分)
    PAT Advanced 1088 Rational Arithmetic (20分)
    PAT Advanced 1032 Sharing (25分)
    Linux的at命令
    Sublime Text3使用指南
    IntelliJ IDEA创建第一个Groovy工程
    Sublime Text3 安装ftp插件
    Sublime Text3配置Groovy运行环境
  • 原文地址:https://www.cnblogs.com/yml435/p/4655536.html
Copyright © 2011-2022 走看看