用动态规划算法解决矩阵连乘问题

本文探讨如何使用动态规划算法找到最佳的矩阵连乘顺序,以减少所需的乘法总次数。通过分析矩阵连乘的结合律,提出递归算法并指出其指数级的时间复杂度。接着,通过引入dp解决重复子问题,给出C和Java的实现,算法的时间复杂度降低到O(n^3),空间复杂度为O(n^2)。
摘要由CSDN通过智能技术生成

对一系列的矩阵进行乘法运算,求最佳的运算结合顺序,使得所需的乘法总次数最少。

我们知道,矩阵连乘满足结合律,如对于四个矩阵相乘 ABCD,有

ABCD = (ABC)D = (AB)(CD) = A(BCD) = ...

但是结合顺序不同,所需要的乘法总次数也就不同,如对于三个矩阵连乘 A[10*30] * B[30*5] * C[5*60],有两种结合顺序,每种结合顺序所需的乘法总次数如下:

(AB)C = (10×30×5) + (10×5×60) = 1500 + 3000 = 4500 次 A(BC) = (30×5×60) + (10×30×60) = 9000 + 18000 = 27000 次

不难看出第一种结构顺序的乘法总次数比第二种的少得多。

现给定一维数组 p[],用于表示系列矩阵的行列数,第 i 个矩阵的行列数为 p[i-1]*p[i],试编程计算所需的最少乘法总次数是多少。如

  Input: p[] = {40, 20, 30, 10, 30}   
四个矩阵的维数分别为 40x20, 20x30, 30x10 and 10x30
  Output: 26000  
最优结合顺序为 (A(BC))D --> 20*30*10 + 40*20*10 + 40*10*30

Input
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Storm-Shadow

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值