动态规划

  动态规划思想与分治法很类似,都是将问题划分成若干个子问题,他们之间的区别在于:动态规划的子问题之间不是相互独立的。
  • 动态规划算法的步骤
    (1)找出最优解的性质,刻画其结构特征;
    (2)递归定义最优值;
    (3)以自底向上的方式计算最优值;
    (4)构造最优解;

  • 动态规划算法的两个基本要素:最优子结构和重叠子问题

  • 矩阵连乘问题
    问题描述
    给定n个矩阵{A1A2…An},其中Ai和Ai+1是可乘的,考察这n个矩阵的连乘积A1A2…An。由于矩阵的乘法满足结合律,故计算矩阵的连乘积有许多不同的计算次序,而不同的计算次序,所需要计算的连乘次数也是不同的,求解连乘次数最少的矩阵连乘最优次序。
    举例说明矩阵结合方式对数乘次数的影响:
    矩阵连乘积A1A2A3,3个矩阵的维数分别为10100,1005和550,连乘时加括号的方式有:
    ((A1
    A2)A3) 数乘次数:101005+10550=7500
    (A1
    (A2A3)) 数乘次数:100550+10100*50=7500
    (1)分析问题的最优解(刻画最优解的特征):
    计算A[1,:k]和A[k+1:n]的次序是最优的,满足最优子结构性质
    (2)建立递归关系(递归定义最优值):
    当i=j时,m[i][j]=0;
    当i<j时,m[i][j]=min{m[i][k]+m[k+1][j]+Pi-1PkPj}(i≤k<j)
    (3)计算最最优值(自底向上进行):
    例如,下面有6个矩阵A1,A2,……,A6.按照动态规划算法计算出m[i][j]和s[i][j]填入表中:
    其中 A1:30×35 A2:35×15 A3:15×5 A4:5×10 A5:10×20 A6:20×25
    令p0 = 30,p1=35,p2=15,p3=5,p4=10,p5=20,p6=25
    在这里插入图片描述
    具体的求解过程如上图所示;
    时间复杂度为:O(n^3)

(4)构造最优解;

  • 最长公共子序列
    问题描述
    集合X={A,B,C,F,G,H,D},Y={B,C,D,A,F,H}。序列{B,C}是集合A,B的一个子序列,但它不是最长的。这里的{B,C,D}的长度为3,是X,Y的最长公共子序列。最长公共子序列问题:给定2个序列X={x1,x2,……,xm}和Y={y1,y2,……,yn},找到X,Y的最长公共子序列;
    构造最优解的结构:
    设序列X={x1,x2,……,xm}和Y={y1,y2,……,yn}的最长公共子序列Z={z1,z2,……,zk},则:
    a、若xm=yn,则zk=xm=yn,且Zk-1是Xm-1和Yn-1的最长公共子序列;
    b、若xm≠yn,且zk≠xm,则Z是Xm-1和Y的最长公共子序列;
    c、若xm≠yn,且zk≠yn,则Z是X和Yn-1的最长公共子序列;
    证明过程可以利用反证法证明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值