作者:JF
题目描述
给定一个矩阵相乘的表达式,计算矩阵相乘的次数。例如,假设A是50*10矩阵,B是10*20矩阵,C是20*5矩阵。计算A*B*C有两种不同的策略,即(A*B)*C和A*(B*C)。第一个需要15000个初等乘法,但第二个只需要3500个。
先输入一个整数N,然后输入N个矩阵的信息,矩阵名称,矩阵的行列数。接着给出一些表达式,输出表达式所需的相乘次数,如果表达的计算因矩阵不匹配而导致错误,则输出“error”。
输入输出样例
输入
9
A 50 10
B 10 20
C 20 5
D 30 35
E 35 15
F 15 5
G 5 10
H 10 20
I 20 25
A
B
C
(AA)
(AB)
(AC)
(A(BC))
((AB)C)
(((((DE)F)G)H)I)
(D(E(F(G(HI)))))
((D(EF))((GH)I))
输出
0
0
0
error
10000
error
3500
15000
40500
47500
15125
思路
用map来保存每个矩阵名到矩阵行列的映射关系,对于输入的表达式,如果长度为1则直接输入0,否则依次遍历整个表达式,遇到‘(’和大写字母直接入栈,遇到‘)’计算栈顶两个矩阵的相乘次数,依次累加,并将一个新的矩阵入栈(新矩阵行列由第一个矩阵的行和第二个矩阵的列构成,名称为当前遍历的序号i)。
注意点
1.注意两矩阵相乘的前后顺序。
2.计算完两矩阵相乘次数后先把原矩阵和‘

这篇博客探讨了如何计算矩阵相乘的次数,给出了一个实例:50*10的矩阵A乘以10*20的矩阵B再乘以20*5的矩阵C。通过两种不同的策略,即(A*B)*C和A*(B*C),展示了它们所需的初等乘法次数。第一种策略需要15000次,而第二种只需3500次。文章还提供了一个AC代码实现,用于处理矩阵乘法表达式的计算和错误检查。
最低0.47元/天 解锁文章
2849

被折叠的 条评论
为什么被折叠?



