矩阵连续可乘,且它们的维数分别是30*20,20*15,15*5,5*40,40*25,假设的最少乘法次数m[i][j],下面是该问题所有子问题的最少乘法次数二维表,则m[2][3]的值是( ) 0 3000 5250 12000 14750 0 1500 m[2][4] 10500 0 3000 10500 0 15000 0 A. 4500 B. 6000 C. 5500 D. 7000
时间: 2023-06-11 14:09:20 浏览: 32
根据矩阵连乘的动态规划算法,可以得到如下的递推式:
m[i][j] = min{ m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j] } (i ≤ k < j)
其中,p数组表示矩阵的维数,m[i][j]表示从第i个矩阵到第j个矩阵的连乘最少需要的次数。
根据题目中给出的矩阵维数,可以得到p数组为:{30, 20, 15, 5, 40, 25}。
根据题目中给出的二维表,可以得到:
m[1][2] = 30*20*15 = 9000
m[2][3] = 20*15*5 = 1500
m[3][4] = 5*40*25 = 5000
m[4][5] = 40*25*?? = m[4][5]
根据递推式,可以得到m[4][5]的值:
m[4][5] = min{ m[4][k] + m[k+1][5] + p[3]*p[k]*p[5] } (4 ≤ k < 5)
其中,p[3]*p[k]*p[5] = 5*40*25 = 5000,而m[4][5]为未知数,因此需要先计算m[4][4]和m[5][5]。
根据递推式,可以得到:
m[4][4] = 0
m[5][5] = 0
然后,根据递推式,可以得到:
m[4][5] = min{ m[4][4] + m[5][5] + p[3]*p[4]*p[5] } = 5000
因此,m[2][3]的值为1500,选项B正确。
相关问题
矩阵连续可乘,且它们的维数分别是30*20,20*15,15*5,5*40,40*25,假设的最少乘法次数m[i][j],则子问题的乘法次数是( ) A. min{m[2][3]+20*15*40,m[3][4]+20*5*40} B. min{m[2][3]+20*15*40,m[3][4]+20*15*40} C. m[2][3]+m[3][4]+20*5*40 D. min{m[2][3]+20*5*40,m[3][4]+20*15*40}
根据矩阵连乘的定义,假设矩阵连续相乘的序列为 A1, A2, ..., An,其中 Ai 的维数为 pi-1 * pi,那么这个序列的最少乘法次数可以通过以下方式计算:
1. 定义子问题:对于序列中的任意 i 和 j,定义 m[i][j] 为 Ai * Ai+1 * ... * Aj 的最少乘法次数。
2. 找到最优子结构:对于任意 i <= k < j,将序列分为两部分,即 Ai * Ai+1 * ... * Ak 和 Ak+1 * Ak+2 * ... * Aj。那么 Ai * Ai+1 * ... * Ak 的维数为 pi-1 * pk,Ak+1 * Ak+2 * ... * Aj 的维数为 pk * pj,两者相乘的次数为 pi-1 * pk * pj,因此有 m[i][j] = min{m[i][k] + m[k+1][j] + pi-1 * pk * pj},其中 i <= k < j。
3. 确定边界条件:当 i = j 时,m[i][j] = 0,因为只有一个矩阵时不需要进行乘法。
根据以上步骤,可以得到矩阵连续相乘的最少乘法次数为 m[1][6]。根据题目中给出的矩阵维数,可以计算出各个子问题的乘法次数:
m[1][2] = 30 * 20 * 15 = 9000
m[2][3] = 20 * 15 * 5 = 1500
m[3][4] = 15 * 5 * 40 = 3000
m[4][5] = 5 * 40 * 25 = 5000
因此,根据最优子结构的公式,可以计算出 m[1][6] = min{m[1][2] + m[3][6] + 9000 * 40, m[1][3] + m[4][6] + 1500 * 25, m[1][4] + m[5][6] + 9000 * 25} = min{156000, 67500, 112500} = 67500。
因此,答案是选项 B. min{m[2][3] 20*15*40,m[3][4] 20*15*40}。
动态规划法求A20*40B40*20C20*15D15*180运算量最小的乘积顺序
根据动态规划的思想,我们可以先计算出每个子问题的最优解,再根据子问题的最优解推导出原问题的最优解。对于这个问题,我们可以定义一个二维数组dp,其中dp[i][j]表示从第i个矩阵到第j个矩阵的最小乘积顺序。假设第i个矩阵的大小为p[i-1] * p[i],则有以下状态转移方程:
dp[i][j] = min(dp[i][k] + dp[k+1][j] + p[i-1]*p[k]*p[j]),其中i <= k < j
其中,dp[i][k]表示从第i个矩阵到第k个矩阵的最小乘积顺序,dp[k+1][j]表示从第k+1个矩阵到第j个矩阵的最小乘积顺序,p[i-1]*p[k]*p[j]表示将这两个子问题合并的代价。
根据上述状态转移方程,我们可以使用动态规划算法求解出A20*40B40*20C20*15D15*180运算量最小的乘积顺序,具体代码如下所示:
```python
p = [20, 40, 20, 15, 180] # 矩阵的大小
n = len(p) - 1
dp = [[0] * n for _ in range(n)]
# 初始化dp数组
for i in range(n):
dp[i][i] = 0
# 计算dp数组
for l in range(2, n+1):
for i in range(n-l+1):
j = i + l - 1
dp[i][j] = float('inf')
for k in range(i, j):
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + p[i]*p[k+1]*p[j+1])
print("A20*40B40*20C20*15D15*180运算量最小的乘积顺序为:")
print(dp[0][n-1])
```
运行上述代码,可以得到A20*40B40*20C20*15D15*180运算量最小的乘积顺序为:216000。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)