贪心算法(一)背包问题

本文介绍了贪心算法、分治法和动态规划的区别,强调贪心算法并不适用于所有背包问题。通过0-1背包问题的案例,展示了动态规划解决背包问题的方法,解释了状态转移方程,并提供了部分代码示例。
摘要由CSDN通过智能技术生成

1、贪心算法、分治法、动态规划之间的区别与联系

分治法:将原问题划分成 n 个规模较小的,并且结构与原问题相似的子问题;递归地解决子问题;然后合并其结果。比如快速排序、归并排序等。分治法能解决的问题,一般具有以下特征

(1)问题的规模缩小到一定程度就可以解决;

(2)该问题可以分解为若干规模较小的相同问题;

(3)子问题的解可以合并为该问题的解;

(4)子问题是相互独立的。

第(1)个特征绝大多数问题都能满足;第(2)条特征是应用分治法的前提,也是大多数问题满足的;如果不满足第(3)条特征,即问题容易分解,但是很难合并成全局解,那么,就应该考虑贪心算法和动态规划;第(4)条满足与否关系到分治法的效率。如果多个子问题存在公共的子问题,那么分治法也可以用,但是效率低下。此时最好采用动态规划。

动态规划:常用于最优化问题。此类问题中,可能存在多个可行解,每个解对应一个值,而我们希望找到一个最优(最大最小最长等)值得解,则称这样的解为该问题的一个(记住,是一个!因为可能存在多个)最优解。比如说求字符串ABCBDAB 和 BDCABA 的最长公共子序列的长度,这个长度为4,是唯一确定的,但是,BCBA 和   BDAB 都是,所以是不唯一的。

动态规划解决的问题,分解成的子问题往往不是独立的。我们可以利用一个表格来记录所有的已解的子问题的答案。不管这个子问题以后会不会被用到。主要它被计算过,那么,就将它填入表格中,这就是动态规划的基本思路。具体的动态规划算法有很多,但是他们都具有相同的填表格式。

贪心算法:是使所做的选择在当时看起来是最佳的,期望通过所做的局部最优选择来产生一个全局最优解。当然,这种启发式策略并不能总是得到最优解。

贪心算法与动态规划的区别:贪心选择性质(全局最优解可以通过局部最优贪心选择来获得)是不同于动态规划之处。在动态规划中,每一步都要做出选择,但是这些选择依赖于子问题的解。所以,这么一级一级往下推演,最小的子问题是最该被解决的。所以。动态规划问题一般是自底向上,从小到大。而贪心算法所做的当前选择,可能依赖于已经做出的选择,但是不依赖所做出的选择或者子问题的解。因此,贪心策略通常是自顶往下,一个一个做出贪心选择,不断将给定问题实例规约为更小的

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值