基于动态规划求解矩阵连乘问题

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

一、实验目的

1.掌握基于使用动态规划的方法求解矩阵连乘问题最优计算次序和最小计算次数问题的原理。

2.掌握求解矩阵链最小数乘次数动态规划函数的设计方法。

3.掌握基于动态规划方法求解矩阵连乘问题算法的具体步骤。

4.掌握运用动态规划的思想和方法设计算法解决和简化其他实际应用问题的能力。

5.体会动态规划的设计思想,通过矩阵连乘实验深刻理解动态规划如何简化计算步骤和减少求解问题时间。

二、实验环境

操作系统:Windows10

实验平台:CodeBlocks

编译器:Gcc

实验语言:C++

三、实验内容

给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,(i=1,2 ,…,n-1),考察这n个矩阵的连乘积A1A2...An,矩阵连乘的计算次序可以使用加括号的方法表示,对于n个矩阵连乘的次序,不同的计算次序计算量,即乘法次数是不同的,找出一种最优的计算次序,使得矩阵连乘的次数最小,并给出该次序下,即矩阵连乘的最小次数。

为了使问题描述更清晰,给出例子:现有A1大小为(5*10)的矩阵,A2大小为(10*100)的矩阵,A3大小为(100*2)的矩阵。那么有两种加括号的方法(使用加括号的方法表示计算次序):(A1A2)A3和A1(A2A3),容易得出,前者矩阵连乘次序的计算量为5*10*100+

5*100*2,结果为6000,后者矩阵连乘次序的计算量为10*100*2+5*10*2,结果为2100,可以看出,不同矩阵连乘次序对结果即计算量差别很大。

四、算法描述

分析最优解的结构:首先刻画解决矩阵连乘问题的最优解的结构特征,将矩阵连乘积AiAi+1...Aj记为A[i:j],即考察A[1:n]的最优计算次序,考虑在该计算次序在矩阵Ak和Ak+1之间的矩阵链断开,则先计算A[1:k]和A[k+1:n],再将计算结果相乘,可知总计算量为A[1:k]的计算量加上A[k+1:n]的计算量,再加上A[1:k]和A[k+1:n]相乘的计算量,分析可知,计算A[1:n]的最优次序所包含的矩阵子链A[1:k]和A[k+1:n]的次序是最优的。

建立递归关系:设计算A[i:j],所需的最少乘法次数为m[i][j],原问题的最优解即为m[1][n]。当i==j时,A[i:j]=Ai为单一矩阵,即m[i][i]=0,当i<j时m[i][j]的计算可以通过问题的最优子结构求解,即m[i][j]=m[i][k]+m[k+1][j]+pi-1*pk*pj,对于k的位置,有j - 1种可能,为这些可能中使得计算量达到最小的那个位置。可得m[i][j]的递归定义式为:

基于动态规划求解矩阵连乘问题

将对应m[i][j]的断开位置k记为s[i][j],计算出最优值(m[i][j]),即可递归的由s[i][j]构造出最优解。

计算最优值:由递归式可知,计算m[1][n]可以通过递归算法来实现,依据递归式自底向上的进行计算,计算过程中保存已经解决的子问题的答案,避免了大量重复的计算。首先计算出m[i][i] = 0,根据递归式,按矩阵链递增的方式依次计算m[i][i+1], m[i][i+2](矩阵链长度为三),在计算m[i][j]时,只用到已经计算出的m[i][k]和m[k+1][j]。

对所设计算法(主函数为matrixChain)分析可知,该动态规划算法主要的计算量取决于r,i,k的三重循环,三重循环体内的计算量为O(1),三重循环的总次数为O(n^3),该算法的时间复杂度为O(n^3), 空间复杂度为O(n^2)。

五、实验结果

设输入矩阵的个数为6,分别为A1(30*35), A2(35*15), A3(15*5),A4(5*10), A5(10*20), A6(20*25)。通过算法计算得出矩阵连乘的最少次数为15125次,最优计算次序为((A1(A2A3))((A4A5)A6))。

基于动态规划求解矩阵连乘问题

六、实验总结

通过本次实验,我认识到矩阵连乘问题,关键是解决断开点k的位置和最少数乘次数。深刻理解了动态规划算法的几个基本步骤。动态规划的算法设计中,建立递归关系是很关键的一步(确定状态转移方程),是整个动态规划算法的精髓。掌握了递归的思想,就可以完成很多不必要的重复计算。

通过基于动态规划求解矩阵连乘问题的实验,还可以总结使用动态规划求解问题的基本解题步骤,首先要确定子问题,重点分析哪些变量变量是随着问题规模的变小而变小的,哪些变量与问题的规模无关。第二步确定状态,根据找到的子问题来给分割的子问题限定状态,第三步,推导状态转移方程,特别注意状态转移方程需要满足所有的条件,不能有遗漏。第四步,确定边界条件和实现方法,是使用for循环还是其他方法。文章来源地址https://www.toymoban.com/news/detail-415655.html

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

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

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

相关文章

  • 动态规划:矩阵连乘问题(文末附有手写版例题)

    A是一个p × q矩阵,B是一个q × r矩阵,AB相乘,得到的矩阵元素个数为p × r,每个元素由q次乘法得到,因此所需乘法次数为p × q × r。 在计算矩阵连乘积时,加括号的方式对计算量有影响。 例如有三个矩阵A1,A2,Ag连乘,它们的维数分别为 10x100,100×5,5×50。用第一种加括号方

    2024年02月04日
    浏览(33)
  • 动态规划2:算法考试矩阵连乘问题(超详细手写过程)

                                      更多期末复习笔记欢迎访问我的博客: Miuuu · 语雀​​​​​​​ 动态规划理论基础:(6条消息) 动态规划1:动态规划的入门初学理论基础_黑色柳丁Angel的博客-CSDN博客 矩阵连乘问题是我在算法课接触的第一个动态规划问题

    2023年04月08日
    浏览(31)
  • 『动态规划』矩阵连乘

    活动地址:CSDN21天学习挑战赛 👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟 🏡个人主页:starry陆离 🕒首发日期:2022年8月16日星期二 🌌上期文章:『动态规划』动态规划概述 📚订阅专栏:『算法分析与设计』 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

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

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

    2024年02月03日
    浏览(45)
  • 动态规划算法学习一:DP的重要知识点、矩阵连乘算法

    三部曲如下三步: 基本原则:“空间换时间” 存储重复子问题的解,减少运算时间 底层运算:“表格操作” 用表格存储子问题的解 实现路线:“子问题划分、自底向上求解” 利用表格中存储的子问题的解,求上一层子问题的解。 矩阵连乘计算次序 可以用 加括号的方式

    2024年02月09日
    浏览(32)
  • 【动态规划】求解编辑距离问题

    编辑距离问题是求解将⼀个字符串转换为另⼀个字符串所需的 插⼊、删除、替换 的最小次数。 C O M M O M → s u b C O M M U M → s u b C O M M U N → i n s C O M M U N E mathbb{COMMOM} overset{sub}{rightarrow} mathbb{COMMUM} overset{sub}{rightarrow}mathbb{COMMUN} overset{ins}{rightarrow} mathbb{COMMUNE} COMMOM →

    2024年02月02日
    浏览(37)
  • 整数规划——分支界定算法(旅行商问题,规约矩阵求解)

    一、普通优化问题分枝定界求解 题目的原问题为   在计算过程中,利用MATLAB中的linprog()函数进行求解最优解,具体的计算步骤如下: A为约束系数矩阵,B为等式右边向量,C为目标函数的系数向量。   进行第一次最优求解以A=[2 9;11 -8],B=[40;82],C=[-3,-13]利用linprog函数求解。解

    2024年02月16日
    浏览(28)
  • 算法分析与设计——动态规划求解01背包问题

    假设有四个物品,如下图,背包总容量为8,求背包装入哪些物品时累计的价值最多。 我们使用动态规划来解决这个问题,首先使用一个表格来模拟整个算法的过程。 表格中的信息表示 指定情况下能产生的最大价值 。例如, (4, 8)表示在背包容量为8的情况下,前四个物品的最

    2024年02月04日
    浏览(50)
  • 运筹系列82:使用动态规划求解TSP问题

    定义 c ( s , k ) c(s,k) c ( s , k ) 为当前在 k k k ,待访问点的集合 s s s ,最后返回城市0的最短路径,那么Bellman方程为: c ( s , k ) = min ⁡ i ∈ s { c ( s − { i } , i ) + d i , k } c(s,k)=min_{i in s}{c(s-{i},i)+d_{i,k}} c ( s , k ) = min i ∈ s ​ { c ( s − { i } , i ) + d i , k ​ } 为了使用方便,这里

    2024年02月06日
    浏览(35)
  • 运筹系列87:julia求解随机动态规划问题入门

    随机动态规划问题的特点是: 有多个阶段,每个阶段的随机性互不相关,且有有限个实现值 (finite realizations) 具有马尔可夫性质,即每个阶段只受上一个阶段影响,可以用状态转移方程来描述阶段与阶段之间的变化过程。 我们使用julia的SDDP算法包来求解随机动态规划问题。

    2024年01月16日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包