DP优化:矩阵乘法

话说这是博主的第一篇博客。。。

咳咳咳,今天讲的是DP的一种优化策略——矩阵乘法

关于能用矩阵乘法优化的DP题目,有如下几个要求:

  1. 转移式只有加法,清零,减法etc.,max和min运算不允许
  2. 转移式中关于前几位dp结果得到的系数必须是常量
  3. 转移次数一般超级多
  4. 由于转移次数多,一般都要模一个int范围内的数

综上,举一个例子:

d p [ i ] = a × d p [ i − 1 ] + b × d p [ i − 2 ] + c × d p [ i − 3 ] dp[ i ]=a×dp[ i-1 ]+b×dp[ i-2]+c×dp[ i-3 ] dp[i]=a×dp[i1]+b×dp[i2]+c×dp[i3]

其中,a,b,c是常量,而在需要矩阵优化的DP中,往往 i 在2^128之类的,特别鬼畜的特别大的数;
因为矩阵乘法优化后求dp[ i ] 是在O log(i)的时间内完成的。
那么,关于矩阵乘法如何实现,它的原理又是啥呢?
矩阵乘法需要两个矩阵A与B,A是n×p,B是p×m的大小,如下图此图取自百度百科
为了方便解释,我们举斐波那契的例子。
斐波那契的转移式是:dp[ i ]=dp[ i-1 ]+dp[ i-2 ]。
那么我们把(dp[ i ],dp[ i-1 ])看做一个1×2的矩阵A
而每次转移相当于把A乘以矩阵F:
|1 1|
|1 0|
得出的结果是: ( d p [ i ] + d p [ i − 1 ] , d p [ i ] ) (dp[ i ]+dp[ i-1],dp[ i ]) dp[i]+dp[i1]dp[i],也就是 ( d p [ i + 1 ] , d

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
矩阵乘法优化动态规划是用来解决矩阵连乘积的最优计算次序的问题。这个问题可以通过动态规划的方法来解决。首先,我们定义一个二维数组dp[i][j],其中dp[i][j]表示计算矩阵Ai到Aj的最优计算次序所需的最少乘法次数。然后,我们可以使用递推的方式来计算dp[i][j]的值。 具体的递推步骤如下: 1. 初始化dp[i][i]为0,表示只有一个矩阵时,不需要进行乘法操作。 2. 对于dp[i][j],我们需要枚举一个分割点k,将矩阵连乘积分成两部分,即Ai到Ak和Ak+1到Aj。我们可以通过遍历所有可能的分割点k,来求解dp[i][j]的最小值。 3. 对于每个分割点k,我们可以使用递归的方式求解dp[i][k]和dp[k+1][j]。 4. 根据动态规划的思想,我们可以使用一个循环来遍历所有可能的分割点k,并更新dp[i][j]的值。 最终,当我们计算完所有的dp[i][j]后,dp[n]就表示了矩阵A1到An的最优计算次序所需的最少乘法次数。 这个方法的时间复杂度为O(n^3),其中n表示矩阵的个数。通过使用动态规划来优化矩阵连乘积的计算次序,可以大大减少计算量,提高算法的效率。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [矩阵连乘积问题——动态规划](https://blog.csdn.net/qq_43633063/article/details/105943437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [动态规划 矩阵连乘优化](https://blog.csdn.net/u012785169/article/details/100677011)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值