当前位置: 首页 > ai >正文

矩阵链乘法问题

矩阵链乘法问题

  • 问题介绍
  • 穷举法
  • 动态规划法
    • 步骤1:分析最优解的结构,划分子问题
    • 步骤2:递归求解最优解的值
    • 步骤3:计算最优代价,自底向上记忆化方式求解𝒎 [𝒊] [𝒋]
  • 计算实例

问题介绍

给定𝑛个矩阵 𝐴 1 , 𝐴 2 , … , 𝐴 𝑛 𝐴_1, 𝐴_2, … , 𝐴_𝑛 A1,A2,,An 𝐴 𝑖 𝐴_𝑖 Ai的维数为 𝑝 𝑖 − 1 × 𝑝 𝑖 𝑝_{𝑖−1} × 𝑝_𝑖 pi1×pi (1 ≤ 𝑖 ≤ 𝑛),以一种最小化标量乘法次数的方式进行完全括号化。

①设 𝐴 𝑝 × 𝑞 , 𝐴 𝑞 × 𝑟 𝐴_{𝑝×𝑞}, 𝐴_{𝑞×𝑟} Ap×q,Aq×r两矩阵相乘,这里定义普通乘法次数为𝑝 × 𝑞 × 𝑟;
②加括号多乘法次数的影响:请添加图片描述

穷举法

列举出所有可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一
种数乘次数最少的计算次序。

用𝑝(𝑛)表示𝑛个矩阵链乘的穷举法计算成本,如果将𝑛个矩阵从第𝑘和第𝑘 + 1处隔开,对两个子序列再分别加扩号,则可以得到下面递归式:
请添加图片描述

动态规划法

步骤1:分析最优解的结构,划分子问题

矩阵链乘问题满足最优性原理:记𝐴[𝑖:𝑗]为 𝐴 𝑖 𝐴 𝑖 + 1 … 𝐴 𝑗 𝐴_𝑖𝐴_{𝑖+1} … 𝐴_𝑗 AiAi+1Aj链乘的一个最优括号方法,设𝐴[𝑖:𝑗]的最优次序中含有二个子链𝐴[𝑖: 𝑘]和𝐴[𝑘 + 1:𝑗],则𝐴[𝑖: 𝑘]和𝐴[𝑘 + 1:𝑗]也是最优的。(反证法可得)

矩阵链乘的子问题空间𝑨 𝒊:𝒋 (𝟏 ≤ 𝒊 ≤ 𝒋 ≤ 𝒏):
请添加图片描述

步骤2:递归求解最优解的值

记𝑚[𝑖:𝑗]为计算𝐴[𝑖:𝑗]的最少乘法次数,则原问题的最优值为𝑚 1 [𝑛],那么有:请添加图片描述
其中,
① 取得的𝑘为𝐴[𝑖:𝑗]最优次序中的断开位置,并记录到表𝑠[𝑖][𝑗]中,即𝑠[𝑖][𝑗] ← 𝑘;
② 𝑚[𝑖][𝑗]实际是子问题最优解的解值,保存下来避免重复计算。
请添加图片描述
在递归计算时,许多子问题被重复计算多次。这也是该问题可用动态规划算法求解的又一显著特征。

步骤3:计算最优代价,自底向上记忆化方式求解𝒎 [𝒊] [𝒋]

用动态规划算法解此问题,可依据其递归式以自底向上的方式进行计算。在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计算,最终得到多项式时间的算法。
请添加图片描述

void MatrixChain(int *p,int n,int **m,int **s)
{for (int i = 1; i <= n; i++) m[i][i] = 0;for (int r = 2; r <= n; r++)for (int i = 1; i <= n - r+1; i++) {int j=i+r-1;m[i][j] = m[i+1][j]+ p[i-1]*p[i]*p[j];s[i][j] = i;for (int k = i+1; k < j; k++) {int t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];if (t < m[i][j]) { m[i][j] = t; s[i][j] = k;}}}
}
时间复杂度分析:
①算法matrixChain的主要计算量取决于算法中对𝑟, 𝑖和𝑘的3重循环;
②循环体内的计算量为𝑂(1),而3重循环的总次数为$𝑂(𝑛^3)$;
③因此算法的计算时间上界为$𝑂(𝑛^3)$;
④算法所占用的空间显然为$𝑂(𝑛^2)$。

计算实例

假设有如下矩阵
请添加图片描述

  1. 令m[i][i]均为0。
  2. 以此计算m[i][i+1],m[i][I+2]……
  3. 绘制表格

过程如下所示:请添加图片描述

http://www.xdnf.cn/news/9114.html

相关文章:

  • vae 视频截图 复习 gans和vae的原理区别
  • JVM垃圾回收器详细介绍
  • 注解的使用和自定义
  • Composer 常规操作说明与问题处理
  • 【部署】读取制度类txt文件导入dify的父子分段知识库
  • Kubernetes 1.33您需要了解的和升级新功能
  • 爬虫学习-Scrape Center spa6 超简单 JS 逆向
  • 二叉树遍历
  • 打破壁垒:国内软件业产品与技术割裂困局及工程师产品思维重塑
  • 无网络docker镜像迁移
  • OSC协议简介、工作原理、特点、数据的接收和发送
  • 5月26日day37打卡
  • 【大模型Pre-Training实战总结】实现Qwen3增量预训练,Lora训练与合并
  • 修改mysql 数据库密码记录
  • MySQL数据库零基础入门教程:从安装配置到数据查询全掌握
  • 2025年AIR SCI1区TOP,具有新变异策略和外部存档机制mLSHADE-SPACMA+数值优化与点云配准,深度解析+性能实测
  • 【2025】harbor仓库搭建
  • MAR:无需量化的掩码自回归图像生成模型
  • Windows Server 2016 下封禁端口规避高危漏洞的测试实践
  • 通过chrome插件自动生成博客评论,高效发外链
  • 15.2【基础项目】使用 TypeScript 实现密码显示与隐藏功能
  • wsl2 安装 nodejs
  • 人工智能与教育科技:2025年个性化学习的新模式
  • (C++17) 未捕获异常 uncaught_exceptions
  • Java基础 Day21
  • 从无符号长整型数中提取字节
  • 【Redis】Redis安装
  • 红外遥控器接收实验:CubeMX配置底层软件
  • 基于vue框架的动漫网站noww0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 【windwos】文本编辑器Notepad++ 替代品Notepad--