题解 | 矩阵乘法计算量估算

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

n = int(input())
mat = {}
for i in range(n):
    r, c = map(int, input().split())
    # 映射 A、B、C... 到对应矩阵的(行,列)
    mat[chr(ord('A') + i)] = (r, c)

s = input().strip()
stack = []
total = 0

for ch in s:
    if ch == '(':
        stack.append('(')
    elif ch == ')':
        # 1. 弹出括号内所有矩阵,直到遇到左括号
        temp = []
        while stack[-1] != '(':
            temp.append(stack.pop())
        stack.pop()  # 弹出左括号
        temp = temp[::-1]  # 反转回正确顺序
        
        # 2. 括号内矩阵依次相乘
        cur_r, cur_c = temp[0]
        for i in range(1, len(temp)):
            n_r, n_c = temp[i]
            total += cur_r * cur_c * n_c
            cur_c = n_c  # 更新为新矩阵的列数
        stack.append((cur_r, cur_c))
    else:
        # 字母矩阵直接入栈
        stack.append(mat[ch])

stack = stack[::-1]
while len(stack) > 1:
    m1 = stack.pop()  # 取左边第一个矩阵
    m2 = stack.pop()  # 取左边第二个矩阵
    total += m1[0] * m1[1] * m2[1]
    # 相乘结果插回栈头部
    stack.append(0, (m1[0], m2[1]))

print(total)

全部评论

相关推荐

MrGaomq:你沟通的太少了,我两个号沟通了都1w多了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务