矩阵A、B、C的维数依次为10×30、30×5、5×60。保持乘法顺序ABC不变,只调整括号位置,标量乘法次数较少的是()。
(AB)先做10×30乘30×5,需10×30×5=1500次,结果为10×5;再乘5×60需10×5×60=3000次,共4500次。A(BC)需30×5×60+10×30×60=27000次。
选项分析
正确。1500+3000=4500次。
错误。A(BC)为9000+18000=27000次。
错误。括号次序与次数对应颠倒。
错误。不能把两种方案的代价相加当作任一方案代价。
本题为什么容易错
只看三个矩阵总维数,很难直觉判断。真正影响后续成本的是中间结果尺寸;本题先把30维压到5维,收益非常明显。
简短答案
A为10×30、B为30×5、C为5×60时,怎样加括号乘法次数最少,正确答案是 A((AB)C,需要4500次)。(AB)先做10×30乘30×5,需10×30×5=1500次,结果为10×5;再乘5×60需10×5×60=3000次,共4500次。A(BC)需30×5×60+10×30×60=27000次。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| (AB)C,需要4500次 | 本题正确答案 | 正确。1500+3000=4500次。 | 看到题干核心场景时优先联想到它 |
| A(BC),需要4500次 | 本题干扰项 | 错误。A(BC)为9000+18000=27000次。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| (AB)C,需要27000次 | 本题干扰项 | 错误。括号次序与次数对应颠倒。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 两种次序都需要31500次 | 本题干扰项 | 错误。不能把两种方案的代价相加当作任一方案代价。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- A(BC),需要4500次:错误。A(BC)为9000+18000=27000次。
- (AB)C,需要27000次:错误。括号次序与次数对应颠倒。
- 两种次序都需要31500次:错误。不能把两种方案的代价相加当作任一方案代价。
知识点详解
若矩阵链维度为p0×p1、p1×p2……,在k处分割的代价为左区间最优代价加右区间最优代价,再加p(i-1)×pk×pj。动态规划枚举区间长度和断点,得到全局最小乘法次数。
备考速记
矩阵次序不能换,括号可以换;每一步既算次数,也写中间尺寸。
算法设计在算法设计场景中的作用
数据库查询优化和张量计算也会面对类似的中间结果规模问题。先生成较小中间结果,往往能明显降低后续计算和内存成本。
同类题怎么考
- 比较三矩阵不同括号次序的标量乘法次数。
- 写出矩阵链乘动态规划的区间转移。
算法设计在软件设计师软考中的考法
三个矩阵直接列两种括号并逐项相乘;多个矩阵再上动态规划,不要一开始就凭最小维度贪心。
解题思路
老师建议把中间矩阵尺寸也写出来。(AB)得到10×5的小矩阵,再乘C很省;(BC)得到30×60的大矩阵,再让A去乘就贵。两条路径分别4500和27000,选A。
考点定位
矩阵乘法满足结合律但通常不满足交换律。可以改括号降低计算量,不能随意交换A、B、C的先后。
易错提醒
- 把p×q与q×r相乘写成p×q×q×r。
- 为了更省计算交换矩阵位置,破坏原表达式语义。
- 算出中间代价后忘记第二次矩阵乘法。
备考提示
- 每做一次乘法同时写代价和结果维数。
- 矩阵多于三个时,用区间动态规划记录最小代价和断点。
你可能还想了解
- 矩阵连乘为什么括号不同代价不同?
- 矩阵相乘次数怎么算?
- 矩阵链动态规划状态怎么定义?
本文小结
(AB)C先得到10×5中间矩阵,总代价4500次;A(BC)会产生30×60中间矩阵,总代价27000次。