代码编织梦想

import numpy as np

"""
对于矩阵{A_0,A_1,... ...,A_n}
对应阶数{P_0,P_1,... ...,P_n,P_n+1}
它们的行列表达为 A_0 = P_0 * P_1
"""


def matrixChain(p, n=1, memo=None, seq=None):
    #
    size = len(p) - n  # 子问题个数
    if n == 1:  # 长度为1的矩阵链,数乘次数为0
        memo = np.zeros([size, size], dtype=int)
        seq = np.zeros([size, size], dtype=int)

    else:  # 其他长度
        for i in range(size):  # 左边界
            j = i + n - 1  # 右边界
            for k in range(i, j):  # 分界位置
                t = memo[i, k] + memo[k + 1, j] + p[i] * p[k + 1] * p[j + 1]
                if t < memo[i, j] or memo[i, j] == 0:
                    memo[i, j] = t
                    seq[i, j] = k
    # 进入n+1
    if n < len(p) - 1:
        matrixChain(p, n + 1, memo, seq)
    return memo, seq

def prtSeq(seq, i, j):
    size = j-i+1
    if size ==1:
        return 'A%d'%i
    else:   # 至少有三个元素,才要考虑数乘顺序
        k = seq[i,j]  # 分界位置
        res = ''
        res += '('+ prtSeq(seq, i,   k)
        res += prtSeq(seq, k+1, j) + ')'
        return res

n = eval(input('请输入矩阵个数:'))
p = eval(input('请输入矩阵尺寸:'))
m,seq = matrixChain(p)
res = prtSeq(seq,0,n-1)
print('最佳数乘次序:%s, 此时数乘次数:%d'%(res[1:-1], m[0,-1]))

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/A20172093/article/details/121276399

python实现矩阵相乘的三种方法_mr_leeeee的博客-爱代码爱编程_python实现矩阵相乘

问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为 22∗22 2^2*2^2, 23∗23 2^3*2^3, 24∗24 2^4*2^4,

动态规划 矩阵连乘问题 python_小兔子打了个滚的博客-爱代码爱编程_矩阵连乘问题python

习要学的,博客是要写的,怪兽是要慢慢打的。 给定n个人矩阵{A1,A2,·······,An},其中,Ai与Ai+1是可乘的,i=1,2,3,····n-1。考查矩阵的连乘积A1,A2,····An。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有多种不同的计算次序。  次序由加括号的方式来确定。 m=[[0,0,0,0,0],#储存计算最优值 [0

快速计算----矩阵连乘--dp_--xc的博客-爱代码爱编程_矩阵连乘次数怎么算

给定 n 个矩阵{A1,A2,A3,…,An},其中,Ai 和 Ai+1(i=1,2,…,n−1)是可乘的。用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法,使得矩阵连乘的计算量最小 例如:A1 是 M5×10 的矩阵;A2 是 M10×100 的矩阵;A3 是 M100×2 的矩阵。那么有两种加括号的方法:

不用numpy,实现矩阵连乘_pooryoung的博客-爱代码爱编程

a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.array([[1,4,7],[2,5,8],[3,6,9]]) # 创建一个以a的行为行,b的列为列的矩阵 num_add =

【算法导论】动态规划之矩阵链乘法python实现-爱代码爱编程

前提 浏览了书中的整体流程,对代码的一些部分没太明白 问题定义 求多个矩阵相乘的最优计算顺序,使得计算量最低 编程 看转移方程的定义后将矩阵的行列大小定义为一个列表,本文定义方式p = [30, 35, 15, 5

用python做50道acm之《矩阵连乘》-爱代码爱编程

29.矩阵连乘 http://acm.fzu.edu.cn/problem.php?pid=1061 import sys def times(scheme): left_idx=[] # 用以记录左半括号所

动态规划:矩阵连乘问题-爱代码爱编程

大家好,我是连人。本期我们分享矩阵连乘问题。 在矩阵乘法中,不同的加括号方式的计算顺序可能会有不同的计算次数。 例如A:10×100,B:100×5,C:5×50 以(AB)C计算时,需要10×100×5+10×5×50=7500 以A(BC)计算时,需要100×5×50+10×100×50=75000 显然第一种计算方式计算次数更少,矩阵连乘问

张量分解--非负矩阵分解 (NMF)-爱代码爱编程

1. 非负矩阵分解问题描述 传统的NMF问题可以描述如下:给定矩阵 V ∈ R +

python连乘函数_python动态规划解决矩阵连乘-爱代码爱编程

矩阵连乘:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。 若A是一个p*q的矩阵,B是一个q*r的矩阵,则其乘积C=AB是一个p*r的矩阵。数乘次数是

python矩阵连乘_动态规划:矩阵连乘问题-爱代码爱编程

一、问题描述 给定n个数字矩阵A1,A2,…,An,其中Ai与Ai+1是可乘的,设Ai是pi-1*pi矩阵, i=1,2,…,n。求矩阵连乘A1A2...An的加括号方法,使得所用的乘次数最少。 例子 三个矩阵连乘,可以有(A1A2)A3和A1(A2A3)两种方法求积 ,乘法次数分别为: p0p1p2+p0p2p3和p0p1p3+p1p2p3

python矩阵连乘_第3章 动态规划——矩阵连乘最优计算方式查找-爱代码爱编程

问题:如何得到n个矩阵连乘 的最少计算次数的计算顺序?先计算 ,还是先计算 ?其中, 为矩阵的维度。 1、两个矩阵相乘 两个矩阵相乘 需要多少次运算呢?需要做 次乘法。具体来说,它将得到矩阵 大小的矩阵,该矩阵中每个元素由 次乘法得到。 2、多个矩阵连乘 多个矩阵连乘会有多少种计算方式呢? 穷举法 ,假设从第k个矩阵断开

python矩阵连乘_python动态演示动态规划解决矩阵连乘-爱代码爱编程

矩阵连乘:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。 若A是一个p*q的矩阵,B是一个q*r的矩阵,则其乘积C=AB是一个p*r的矩阵。数乘

python 矩阵连乘-爱代码爱编程

''' 矩阵连乘问题 A1 A2 A3 A4 A5 A6...相乘,求计算量最小的加括号的方式 m[i][j] :A[i]到A[j]的计算量 s[i][j] :A[i]到A[j] 应该加括号的地方 ''' def MatrixChain(p, n, m, s): for r in range(2, n+1): for i in ra