动态规划几个经典例子总结

1.了解动态规划 

   写的不是特别详细,凑合看吧,嘿嘿, 快要考试了,攒人品....

动态规划的核心思想就是避免子问题重复计算,采用用空间换取时间的方法提高算法效率,比如用递归实现的斐波那契数与用数组记录子问题实现的递推算法就是最简单的动态规划思想,用表的形式记录子问题,防止重复求解,类似的例子也使用与其他递归公式,难点在于最优子结构性质的发现与证明,通常找出最优子结构后都能写出递推表达式,从而写出动态规划的算法.

动态规划的解题方法:

如果存储解的数组是二维的,或可用二维数组解决的,通常可以画出二维矩阵,行坐标与竖坐标分别对应问题中实际意义.举一个简单的实际的带数据的例子.按照最优子结构(如果还没找到,就根据问题要求),自底向上的求解,最后通常能准确的写出递推关系.


2.典型动态规划例题

   2.1 0-1背包问题

   2.1-1.问题描述:

    一共n中物品,每样物品只有一件,物品i的重量为wi>0,价值为vi,背包的最终容量为weight,求如何添加物品,在不超过背包容量的情况下,背包中物品的价值最大?

    分析:   这是一道典型的动态规划题目,当然可以用回溯法枚举每一种可能,最后求出最大值,但是回溯法的搜索空间为2^n,即每一种物品都有选和不选之分,选择该物品为1,为右子树,不选该物品为0,在为左子树,这样的一个搜索空间为2^n,复杂度为O(2^n).  由于0-1背包问题很显然含有很多子问题,画出回溯法时的解空间树就可以知道有很多重叠的子树,因此我们考虑用动态规划方法求解.


    2.1-2.动态规划方法,找出最优子结构

    设Z={z1, z2, z3, ....,zn}是一个最优解,其中zi=1表示背包中含有该物品,zi=0表示背包中不含该物品.0-1背包问题Knap(n, weight)在此时的价值为dp[n][weiht].下面为0-1背包的最优子结构.

   (1)  如果zn=1,那么dp[k-1][weight - w[n]] + v[n] > dp[n-1][weight],而且{z1,z2,…,zn-1}是Knap(n-1,weight- w[n])的最优解.(最优解包含子问题的最优解)
   (2)  如果zk=0,那么dp[n-1][weight - w[n]) + v[n] <= dp[n-1][weight],而且{z1,z2,…,zn-1}是Knap(n-1,weight)的最优解。
   证明:
   (1)如果dp[k-1][weight - w[n]] + v[n] <= dp[n-1][weight],则有dp[n][we

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值