zoukankan      html  css  js  c++  java
  • 算法作业8——矩阵链的乘法

    1. 

    A1,A2,A3,,An n 个矩阵的序列,其中AiPi-1*Pi阶矩阵,这个矩阵链的输入用向量P=<P0,P1,,Pn>给出。
    给定向量 P,确定一种乘法次序,使得基本运算的总次数达到最小。

    2. 解析

    蛮力法

    枚举所有可能的乘法次序,针对每种次序计算基本运算的次数,从中找出具有最小运算次数的乘法次序,每一种乘法次序对应了一种 n个项中加n-1对括号。

    动态规划法

    Ai..j表示矩阵链相乘的子问题AiAi+1...Aj

    m[i..j] 表示得到乘积Ai..j所用的最少基本运算次数;

    满足优化原则,m[i,j]最小值时,m[i,k]m[k+1,j]也是最小的。

    实例:P=<30,35,15,25,10,5>,n=5

    A1=30*35

    A2=35*15

    A3=15*25

    A4=25*10

    A5=10*5

    (1)r=1

    m[1,1]=0

    m[2,2]=0

    m[3,3]=0

    m[4,4]=0

    m[5,5]=0

    (2)r=2,i=1,2,3,4 ;j=2,3,4,5

    m[1,2]=30*35*15=15750

    m[2,3]=35*15*25=13125

    m[3,4]=15*25*10=3750

    m[4,5]=25*10*5=1250

    (3)r=3,i=1,2,3 ;j=3,4,5

    m[1,3]=min{m[1,2]+m[3,3]+(A1A2)A3, m[1,1]+ m[2,3]+A1(A2A3)}

    m[2,4]=min{m[2,3]+m[4,4]+(A2A3)A4, m[2,2]+ m[3,4]+A2(A3A4)}

    m[3,5]=min{m[3,4]+m[5,5]+(A3A4)A5, m[3,3]+ m[4,5]+A1(A2A3)}

    (4)r=4,i=1,2 ;j=4,5

    m[1,4]=min{ m[1,1]+ m[2,4]+A1(A2A3A4), m[1,2]+ m[3,4]+(A1A2)(A3A4),m[1,3]+ m[4,4]+(A1A2A3)A4};

    m[2,5]=min{ m[2,2]+ m[3,5]+A2(A3A4A5), m[2,3]+ m[4,5]+(A2A3)(A4A5),m[2,4]+ m[5,5]+(A2A3A4)A5};

    (5)r=5,i=1 ;j=5

    m[1,5]=min{m[1,1]+m[2,5]+A1(A2A3A4A5),m[1,2]+m[3,5]+(A1A2)(A3A4A5),m[1,3]+m[4,5]+(A1A2A3)(A4A5),m[1,4]+ m[5,5]+ (A1A2A3A4)A5};

    3. 设计

    Define max=1000000

    MatrixChain(P,n)

    输入:矩阵链Ai...j的输入向量P=<Pi-1,Pi,...,Pj> 1<=i<=j<=n

    输出:计算Ai...j所需最小乘法运算次数m[i..j]和最后一次运算的位置s[i..j]

    1. 令所有 m[i,j]初值为 0,s[i,j]的初值为 i,1<=i<=j<=n
    2. For r=2 to n do //r 为当前问题规模(长度)
    3. For i=1 to n-r+1 do //i 的起点不断变化,各种 r 长
    4. j=i+r-1 //不同终点
    5. m[i,j]=m[i+1,j]+max
    6. For k=i+1 to j-1 do   //不同的划分位置
    7. t=m[i,k]+m[k+1,j]+Pi-1PkPj
    8. If t<m[i,j]
    9. Then m[i,j]=t,s[i,j]=k

    4. 分析

    T(n)=O(n3)

    5. 源码

    https://github.com/2579081436/algorithm.github.io

  • 相关阅读:
    作业
    js判断数组对象属性是否含有某个值
    js去除对象数组中的空值
    js根据含有对象的数组中某一个属性进行排序
    import re
    1
    pycharm2020.3安装激活教程,pycharm2020激活教程
    Elasticsearch(安装篇):Windows下安装和运行Elasticsearch
    Spring Boot (日志篇):Log4j整合ELK,搭建实时日志平台
    Spring Boot(日志篇):Logback集成ELK,处理日志实例
  • 原文地址:https://www.cnblogs.com/-happy-/p/14800365.html
Copyright © 2011-2022 走看看