关于经典背包问题的理解

总结:背包问题

背包问题十分的经典,在动态规划,回溯,分支定界等算法中均有体现,所以讲,其相当与我们在做物理题目时的一个经典板块模型一样,对其的各个解决算法均有深度理解的话,在一些类似算法题目上将会游刃有余。
本篇文章我们主要介绍背包问题的动态规划算法,背包的动态规划我们都很熟悉,模板也很容易背下来,但是一些变形题目摆在面前时总是感到混乱,思路不是很清晰,这在一定程度上反映为理解深度不够,对变量的理解不深,对变量的意义来源,变量保留以及整个思路的初步构建以及逐步递进的过程不够熟悉。在这里,我们做一下比较浅的分析。
其实整体来讲,背包问题的动态规划算是比较简单,我们在进行动态规划时,无疑数组是其核心。我们可以将解决一道题目的过程想象成是在构建一条逐步通往目的地的图,准确地讲,是一张有向图。每个节点就是变量的更新处,我们都知道,背包问题涉及到两重循环,而反映到图上便是我们在构建从dp[0][0]到达dp[n][m]的拓扑图,而为什么说起简单呢,因为在这个图上,每个节点dp[i][j]只出现一次,即一次便达到了其最终值。想想floyd算法,我们不妨也将其想象为一张拓扑图,但是其是由三重循环构成的,一个dp[i][j]要反复作为新节点出现在拓扑图中,故相对来讲比较复杂。
动态规划的更新状态的策略性使得我们只要初始状态规定正确,那么在采用该策略的情况下必定要求出最优解,在这一点上,我们可以明确的感知到这个过程像是递归,我只告诉你正确的起点,以及明确的规则,则必定可以求出最终解。
另外一方面,针对背包问题,我们发现状态的更新永远是小状态更新大状态,这表明无论我们怎么设置两重循环的先后顺序,以及数组两个维度的顺序,只要意义不变,更新策略不变,在求大问题时,其对应的两个小问题已经更新完毕,那么解法便始终是正确的。
一些具体的问题我们就不阐述了,这篇文章主要是为了让我们对于动态规划程序的过程有个潜在的把握,用一个比较广的角度去看待问题的解法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值