用动态规划求解矩阵链相乘的最少乘积次数的问题(C++实现)

本文介绍了如何使用动态规划方法求解矩阵链相乘的最少乘积次数问题,通过C++实现算法,展示了一个具体的矩阵链相乘实例,并详细解析了计算过程和递推公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用动态规划求解矩阵链相乘的最少乘积次数的问题(C++实现)

矩阵链相乘 的问题描述

我们就不具体阐述这个问题的定义了。为了能够更加直白地让读者了解什么是矩阵链相乘的最小乘积次数问题,我们举个简单的例子:
假设有三个矩阵,分别是
M 1 M_1 M1
( 1 1 1 1 1 1 1 1 1 1 ) \begin{pmatrix} 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ 1 & 1 \\ \end{pmatrix} 1111111111

M 2 M_2 M2
( 1 1 1 1 1 1 1 1 ) \begin{pmatrix} 1 & 1 & 1 & 1\\ 1 & 1 & 1 & 1\\ \end{pmatrix} (11111111)

M 3 M_3 M3
( 1 1 1 1 1 1 1 1 1 1 1 1 ) \begin{pmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \\ \end{pmatrix} 111111111111
这个问题就是要找到一个分割方式,使得矩阵相乘 M 1 ∗ M 2 ∗ . . . ∗ M n M_1*M_2*...*M_n M1M2...Mn最后在乘法上计算的次数最少。
比如我们这个问题, M 1 M_1 M1是一个 5 ∗ 2 5*2 52(5行2列)的矩阵, M 2 M_2 M2是一个 2 ∗ 4 2*4 24的矩阵, M 3 M_3 M3是一个 4 ∗ 3 4*3 43的矩阵,其实这个问题和矩阵的元素无关,只和矩阵的行数和列数相关,因此,上边的矩阵的元素我都填的1,没有什么影响。3个矩阵相乘有两种乘法,即

  1. ( M 1 M 2 ) M 3 (M_1M_2)M_3 (M1M2)M3,即先前两个矩阵相乘,然后再乘以第三个矩阵;
  2. M 1 ( M 2 M 3 ) M_1(M_2M_3) M1(M2M3),即先后两个矩阵相乘,然后再和第一个矩阵相乘。
  • 对于第1种情况, M 1 M_1 M1乘以 M 2 M_2 M2需要进行 5 ∗ 2 ∗ 4 = 40 5*2*4=40 524=40 次乘法运算,得到一个5行4列的矩阵 M M M,然后 M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值