矩阵连续可乘,且它们的维数分别是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}
时间: 2023-06-11 14:09:19 浏览: 71
根据矩阵连乘的定义,假设矩阵连续相乘的序列为 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}。
阅读全文