输入和输出部分都很常规,我直接写中间的处理过程。

一、前提

假设矩阵乘法的矩阵存在arr_list中,计算的规则存在role_str中。
arr_list = [[m,n], [n,p], [p,q]]
role_str = (A(BC))

二、运算

2.1.整体思路

通过对role_str进行逐个字符的遍历,并进行相应处理。

  • 1、字符 是左括号,什么也不做
  • 2、字符 是右括号,出栈
  • 3、字符 是非括号,入栈

2.2.细节处理

2.2.1.矩阵乘法时,乘法运算的次数

矩阵乘法的运算有些久没用,忘记了,但这是解题的基础,不会就没得做。看了通过的大神的代码,然后自己在纸上演算了一遍才记起来。
以 [m,n] 表示m行n列的矩阵,以 [m,n] x [n,p] 为例进行矩阵乘法规则说明。

  • 1、第一个矩阵取一行,第二个矩阵取一列,计算时是对应相乘,有n次乘法。
  • 2、还是第一个矩阵刚参加运算的那行,第二个矩阵的所有列(共p列),会有n*p次乘法
  • 3、第一个矩阵的所有行(共m行)参加运算,共会有n*p*m次乘法运算。
  • 4、得出 [m,n] x [n,p] 共会有n*p*m次乘法运算,运算后的矩阵为 [m,p]

2.2.2.出栈处理

  • 1、如果只有一个矩阵,无法进行矩阵乘法,程序结束。
  • 2、如果有多个矩阵,出栈最后两个。注:先出栈的为第二个矩阵,后出栈的为第一个矩阵
  • 3、通过 2.2.1 的方法计算单次矩阵乘法运算的乘法次数,得到运算后的新矩阵
  • 4、将新矩阵入栈,继续参与后面的运算。