Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 242|回复: 0

[默认分类] 动态规划之矩阵链乘法

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-4-9 09:36:11 | 显示全部楼层 |阅读模式





    1. #include <iostream>
    2. #include <vector>
    3. #define MAXVALUE 100000;
    4. using namespace std;
    5. void matrix_chain_order(vector<int>p,vector<vector<int>>&m,vector<vector<int>>&s)
    6. {
    7.         int i, j, k, t;
    8.         int N = p.size() - 1;
    9.         for (i = 0; i <= N; ++i)
    10.                 m[i][i] = 0;
    11.         for (t = 2; t <= N; t++)  //当前链乘矩阵的长度
    12.         {
    13.                 for (i = 1; i <= N - t + 1; i++)  //从第一矩阵开始算起,计算长度为t的最少代价
    14.                 {
    15.                         j = i + t - 1;//长度为t时候的最后一个元素
    16.                         m[i][j] = MAXVALUE;  //初始化为最大代价
    17.                         for (k = i; k <= j - 1; k++)   //寻找最优的k值,使得分成两部分k在i与j-1之间
    18.                         {
    19.                                 int temp = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
    20.                                 if (temp < m[i][j])
    21.                                 {
    22.                                         m[i][j] = temp;   //记录下当前的最小代价
    23.                                         s[i][j] = k;      //记录当前的括号位置,即矩阵的编号
    24.                                 }
    25.                         }
    26.                 }
    27.         }
    28. }
    29. //s中存放着括号当前的位置
    30. void print_optimal_parents(vector<vector<int>>&s, int i, int j)
    31. {
    32.         if (i == j)
    33.                 cout << "A" << i;
    34.         else
    35.         {
    36.                 cout << "(";
    37.                 print_optimal_parents(s, i, s[i][j]);
    38.                 print_optimal_parents(s, s[i][j] + 1, j);
    39.                 cout << ")";
    40.         }
    41. }
    42. int main()
    43. {
    44.         int P[7] = { 30, 35, 15, 5, 10, 20, 25 };
    45.         vector<int>p(P, P + 7);
    46.        
    47.         vector<int>tmp(p.size(), 0);
    48.         vector<vector<int>>m(p.size(), tmp);
    49.         vector<vector<int>>s(p.size(), tmp);
    50.         int i, j;
    51.         matrix_chain_order(p, m, s);
    52.         cout << "m value is: " << endl;
    53.         for (i = 1; i <= 6; ++i)
    54.         {
    55.                 for (j = 1; j <= 6; ++j)
    56.                         cout << m[i][j] << " ";
    57.                 cout << endl;
    58.         }
    59.         cout << "s value is: " << endl;
    60.         for (i = 1; i <= 6; ++i)
    61.         {
    62.                 for (j = 1; j <= 6; ++j)
    63.                         cout << s[i][j] << " ";
    64.                 cout << endl;
    65.         }
    66.         cout << "The result is:" << endl;
    67.         print_optimal_parents(s, 1, 6);
    68.         return 0;
    69. }
    复制代码


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-19 18:13 , Processed in 0.357648 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表