矩阵链相乘(动态规划法)

这篇具有很好参考价值的文章主要介绍了矩阵链相乘(动态规划法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

矩阵链乘法是耳熟能详的问题了,有很多矩阵,排列成矩阵链,矩阵链的要求是相邻的两个是可以相乘的,可以相乘是有条件的,两个矩阵能够相乘的条件就是行、列之间是有关系的,两个矩阵如果能够相乘,就是前面矩阵的列号和后面矩阵的行号是一致的。 如何确定矩阵的乘法顺序,使得元素相乘的总次数最少。

一、问题描述

1、问题

设A1 _,A2 , … ,An为矩阵序列, Ai为 Pi-1 X Pi 阶矩阵,i = 1, 2, … , n. 试确定矩阵的乘法顺序,使得元素相乘的总次数最少。

2、输入:向量

P = < P 0 , P 1 , … , P n > , P = < P_0, P_1, … , P_n >, P=<P0,P1,,Pn>
其 中 P 0 , P 1 , … , P n 为 n 个 矩 阵 的 行 数 与 列 数 其中 P_0, P_1, …, P_n为 n 个矩阵的行数与列数 P0,P1,,Pnn

3、输出:矩阵链乘法加括号的位置.

二、矩阵相乘基本运算次数

矩阵A: i 行 j 列,B: j 行 k 列,以元素相乘作基本运算,计算 AB的工作量
矩阵链相乘(动态规划法)

cts = at1 b1s + at2 b2s + … + atj bjs

AB: i 行 k列,计算每个元素需要做 j 次乘法, 总计乘法次数 为 i j k

Notes:两个矩阵相乘的工作量就是,A、B相乘得到C矩阵,C矩阵里面有i行k列个元素,每一个元素的计算是由列数j的地方的行数来决定的,j次的乘法,这里面有多少次元素j次元素相乘,每一个元素是由j次乘法决定的,一共有i 行 k列(ik)个元素,(ik)是它的总个数,每个元素个数要进行k次乘法,所以总计乘法次数 为 i j k

三、实例说明

1、实例

现在有三个矩阵,A1,A2,A3
P = < 10 , 100 , 5 , 50 > , A 1 : 10 X 100 , A 2 : 100 X 5 , A 3 : 5 X 50 P = <10, 100, 5, 50> , A1: 10 X100, A2: 100 X 5, A3: 5 X 50 P=<10,100,5,50>,A1:10X100,A2:100X5,A3:5X50

最终乘完后是10 X 50的矩阵,这个时候做相乘有两种乘法顺序

(1)比如A1,A2先乘,乘法次数 为 i j k,需要10 X 100 X 50次乘法,(A1 A2)乘完之后的矩阵大小是10 X 5的矩阵,这个矩阵再和A3相乘,它的乘法次数 为10 X 5 X 50,运算次数是7500次

(2)另外一种运算,先让A2,A3先乘,需要100 X 5 X 50次乘法,乘完之后的矩阵大小是100 X 50的矩阵,这个矩阵再和A1相乘,它的乘法次数 为10 X 100 X 50,运算次数是75000次
矩阵链相乘(动态规划法)

这两种乘法的次数明显差别非常大,第一种次序计算次数最少,次序的不同计算的次数也会不同,这个时候问题就变成了加括号的问题

2、蛮力算法

现在有n个矩阵,决定先乘的次序,量级是非常高的
矩阵链相乘(动态规划法)
矩阵链相乘(动态规划法)

3、动态规划算法

矩阵链里面的子问题就是将原问题划分成两段的时候,不管怎样分割,最后一次分割的位置一旦确定以后,原问题就变成了两段。

一个是在最后一次分割最后一次加括号的位置一定会分成左边和右边,左边这一段就是新的矩阵链相乘的问题,在这个里面依然存在要去找一个最好的括号化的方法(也就是往里面加括号),加入的括号能够得到最少的乘法的次数,然后原问题整个矩阵链从左边界到右边界分割成两段以后,原问题加括号的方法,在子问题里面加括号的方法加进去之后的乘法的次数,其实是一样的。

原问题的最优的加括号的方法一定也是也是子问题的最优的加括号的方法,否则我们就可以用剪切粘贴的方法来构成一个新的最优解,最优子结构就不满足了。

  • 子问题划分
    Ai…j:矩阵链 Ai Ai+1 … Aj,边界i, j
    输入向量: < Pi-1, PI, … , Pj>
    其最好划分的运算次数: m[i, j]
  • 子问题的依赖关系
    最优划分最后一次相乘发生在矩阵k 的位置,即
    A~i …j~ = Ai…k Ak+1…j

Ai…j最优运算次数依赖于 Ai…k与 Ak+1…j 的最优运算次数

四、总结

动态规划算法设计要素 :文章来源地址https://www.toymoban.com/news/detail-493337.html

  • 多阶段决策过程,每步处理一个子问题,界定子问题的边界
  • 列出优化函数的递推方程及初值
  • 问题要满足优化原则或最优子结构性质,即:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列

到了这里,关于矩阵链相乘(动态规划法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 矩阵链相乘的乘法次数(动态规划)

    该题是算法动态规划练习题 该题首先要清楚地认识和理解题意 首先,理解一次矩阵乘法会产生多少次乘法运算 例如给定两个矩阵(10 * 5)与(5 * 20) 会产生的乘法次数为 10*5*20=1000次 然后我们要理解当存在多个矩阵相乘时,乘的顺序不同,最终乘法运算的总次数也是不同的

    2024年01月25日
    浏览(38)
  • 最优控制理论 九、Bellman动态规划法用于最优控制

    尽管DP也是最优控制理论的三大基石之一,但长久以来,动态规划法(Dynamic Programming)被认为只能在较少控制变量的多阶段决策问题中使用,维数灾难使他不可能搜索得了整个连续最优控制问题的高维状态空间,因此仍然只能在一些维数较低的离散决策变量最优选择中取得较好

    2024年02月01日
    浏览(47)
  • 回溯法,分支限界法,动态规划法求解0-1背包问题(c++)

    问题描述 给定n种物品和一背包。物品i的重量是wi0,其价值为vi0,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 搜索空间: 子集树(完全二叉树) 约束函数(进包用): 如果当前背包中的物品总重量是cw,前面k-1件物品都已经决定是否进包,那

    2024年02月10日
    浏览(57)
  • 算法设计与分析实验二:动态规划法求解TSP问题和01背包问题

    【实验内容】 (1)tsp问题:利用动态规划算法编程求解TSP问题,并进行时间复杂性分析。 输入:n个城市,权值,任选一个城市出发; 输出:以表格形式输出结果,并给出向量解和最短路径长度。 (2)01背包问题:利用动态规划算法编程求解0-1背包问题,并进行时间复杂性分

    2024年02月03日
    浏览(58)
  • 动态规划--矩阵链相乘问题

    明确原始问题A[1:n]: 计算矩阵链 所需的 最小乘法次数。 (1)是否满足最优子结构,问题的解是否包含子问题的优化解? 若计算A[1:n]的优化顺序在 k 处断开矩阵链,即A[1:n]=A[1:k]×A[k+1:n],则在A[1:n]的优化顺序中,对应于子问题A[1:k]的解必须是A[1:k]的优化解,对应A[k+1:n]的解必

    2024年01月25日
    浏览(46)
  • 7-1 矩阵链相乘问题 (20 分)(思路+详解+题目解析) 动态规划做法

    2:关于本题的矩阵乘法和递推方程的得出 3:实例演示 三:思路 =================================================================== 思路:这里在考虑的的时候,因为是多个矩阵相乘,求的最小乘法次数, 比如 A1_A2_A3_A4, 那么根据划分的不同,那么其乘法顺序也会不同,继而所求的乘法次数

    2024年04月09日
    浏览(76)
  • 矩阵链乘法的动态规划算法_1

    上次我们学习了rod-cutting 问题的动态规划算法,初步了解求解动态规划过程的CRCC步骤,此步骤对于可以运用动态优化的问题非常有用,类似给大家提供了一套思维模板,让我们能更系统的思考和解决问题。本次我们将讨论矩阵链乘法的动态规划算法。 矩阵乘法 在讨论矩阵链

    2024年01月19日
    浏览(51)
  • 【动态规划】矩阵链乘法——算法设计与分析

    对于矩阵 U p × q U_{ptimes q} U p × q ​ 和 V q × r V_{qtimes r} V q × r ​ , Z p × r = U V Z_{ptimes r}=UV Z p × r ​ = U V ,共需计算 p q r pqr pq r 次标量乘法,时间复杂度为 Θ ( p q r ) Theta (pqr) Θ ( pq r ) 矩阵乘法满足结合律,即 ( U V ) W = U ( V W ) (UV)W=U(VW) ( U V ) W = U ( VW ) ,选择不同的结合

    2024年02月03日
    浏览(64)
  • 「算法小记」-2:矩阵链相乘的方案数【迭代/递归/动态规划/区域化DP/记忆化搜索】(C++ )

    😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文收录于洲洲的《算法小记》系列专栏,该专栏记录了许

    2024年02月05日
    浏览(54)
  • 算法导论【分治思想】—大数乘法、矩阵相乘、残缺棋盘

    在分而治之的方法中,一个问题被划分为较小的问题,然后较小的问题被独立地解决,最后较小问题的解决方案被组合成一个大问题的解决。 通常,分治算法有三个部分: 分解:将问题划分为若干子问题,这些子问题是同一问题的较小实例。 解决:通过递归地解决子问题来

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包