【算法】分治、动态规划和贪心算法

这三种算法非常相似,但是又有一些区别,理解如下:

  1. 分治:
    把一个问题划分为若干子问题,求出子问题的最优解,再把子问题的最优解进行merge,最终得到原问题的最优解

  2. 动态规划;
    原问题的最优解包含子问题的最优解(即,拥有最优子结构),同时,求子问题的最优解过程是存在重复的(即,子问题重叠),而分治法的子问题之间是独立的,不存在重复。这种case需要用动态规划来求解

  3. 贪心算法:
    和动态规划类似,但是通过局部最优达到全局最优,而动态规划求解的是全局最优。贪心算法是自顶向下的求解过程。

    贪心算法只需考虑一个选择(亦即,贪心的选择);在做贪心选择时,子问题之一必须是空的,因此只留下一个非空子问题。 贪心算法与动态规划与很多相似之处。特别地,贪心算法适用的问题也是最优子结构。贪心算法与动态规划有一个显著的区别,就是贪心算法中,是以自顶向下的方式使用最优子结构的。贪心算法会先做选择,在当时看起来是最优的选择,然后再求解一个结果子问题,而不是先寻找子问题的最优解,然后再做选择

    贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点,做一个当时看起来是最佳的选择。这一点是贪心算法不同于动态规划之处。在动态规划中,每一步都要做出选择,但是这些选择依赖于子问题的解。因此,解动态规划问题一般是自底向上,从小子问题处理至大子问题。贪心算法所做的当前选择可能要依赖于已经做出的所有选择,但不依赖于有待于做出的选择或子问题的解。因此,贪心算法通常是自顶向下地做出贪心选择,不断地将给定的问题实例归约为更小的问题。贪心算法划分子问题的结果,通常是仅存在一个非空的子问题。

如何判断什么时候使用贪心算法或者动态规划??

状态转移树中,若后一状态仅仅取决于上一个状态,就用贪婪算法;若后一状态取决于之前的多个状态,就用动态规划

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值