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




  • 相关阅读:
    安装oracle客户端后,怎样设置电脑的环境变量?
    KETTLE、spoon使用
    软件环境常识 --dev sit uat
    使用 CAS 在 Tomcat 中实现单点登录 http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
    oracle数据库的完整性约束规则详解
    Oracle创建表语句(Create table)语法详解及示例
    Oracle TO_DATE 日期格式
    L/SQL Developer 和 instantclient客户端安装配置
    mysql里的序列应用详解
    .net core 使用 textSharp生成pdf
  • 原文地址:https://www.cnblogs.com/yml435/p/4655536.html
Copyright © 2011-2022 走看看