题解 | #矩阵乘法计算量估算#可计算括号内有三矩阵的情况A(BCD)

矩阵乘法计算量估算

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

def wukh(ss): #无括号情况
    ls = []
    for i in range(len(ss)): #取得矩阵行列信息
        ls.append(jzs[zm.index(ss[i])])
    ccj = 0
    for i in range(0, len(ss)-1):
        ccj += ls[i][1] * ls[i+1][1]
    cc = ls[0][0] * ccj #计算这部分的乘法次数
    return cc

def youkh(fz1): #有括号时的情况
    global outs,fz
    ind2 = fz1.find(')')
    ind1 = fz1.rfind('(', 0, ind2)
    ss = fz1[ind1 + 1:ind2] # 截取括号内片段
    res = wukh(ss)
    outs += res
    zm.append(chr(ord(zm[-1]) + 1)) #添加新字母,取代括号部分
    jzs.append([jzs[zm.index(ss[0])][0], jzs[zm.index(ss[-1])][1]]) #新矩阵的行列
    A=fz1[ind1:ind2 + 1]
    fz=fz.replace(A,zm[-1]) # 用新矩阵替换括号内部分

n = int(input())
jzs = []
outs = 0
for i in range(n):
    jz = list(map(int, input().split()))
    jzs.append(jz) # 矩阵行列信息
fz = input()
zm = [] 
for i in fz:
    if i != '(' and i != ')' and i not in zm:
        zm.append(i)
zm = sorted(zm) # 字母对应矩阵信息
while '(' in fz: # 有括号一直去括号
    youkh(fz)
ress = wukh(fz) #去完括号计算最终值
outs += ress
print(outs)

全部评论

相关推荐

与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
整顿职场的柯基很威猛:这种不可怕,最可怕的是夹在一帮名校里的二本选手,人家才是最稳的。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:21
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务