软件设计师 · 高频练习

A为10×30、B为30×5、C为5×60时,怎样加括号乘法次数最少?

中级 单选题 第 1096 题 较难 软件设计师矩阵连乘动态规划标量乘法次数算法设计
题目

矩阵A、B、C的维数依次为10×30、30×5、5×60。保持乘法顺序ABC不变,只调整括号位置,标量乘法次数较少的是()。

A (AB)C,需要4500次
B A(BC),需要4500次
C (AB)C,需要27000次
D 两种次序都需要31500次
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

(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次。

选项分析

A

正确。1500+3000=4500次。

B

错误。A(BC)为9000+18000=27000次。

C

错误。括号次序与次数对应颠倒。

D

错误。不能把两种方案的代价相加当作任一方案代价。

本题为什么容易错

只看三个矩阵总维数,很难直觉判断。真正影响后续成本的是中间结果尺寸;本题先把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次。