动态规划,贪心,分治算法的区别

以下摘自《算法笔记》
在区别它们之前我们先明确两个概念:
1.什么是重叠子问题?
如果一个问题可以被分解为若干子问题,并且这些子问题会重复出现,那么就称这个问题为重叠子问题。
2.什么是最优子结构?
如果一个问题的最优解可以由其他子问题的最优解有效的构造出来,那么这个问题拥有最优子问题。

动态规划与分治的区别:
分治和动态规划都是将问题分解为子问题,然后合并子问题的解得到原问题的解。但是不同的是,分治法分解出的子问题是不重叠的,因此分治法解决的问题不拥有重叠子问题,而动态规划解决的问题具有拥有重叠子问题。

贪心与动态规划:
贪心和动态规划都要求原问题必须拥有最优子结构。二者的区别在于 ,贪心法采用的计算方式类似于“自顶向下”,但是并不等待子问题求解完毕后再选择使用哪一个,而是通过一种策略直接选择一个子问题去求解,没被选择的子问题就不去求解了,直接抛弃。也就是说它只在上一步选择的基础上继续选择,因此整个过程以一种单链的流水方式进行,显然这种所谓“最优选择”的正确性需要用归纳法证明。而动态规划不管是采用自底向上还是自顶向下的计算方式,都是从边界开始向上得到目标问题的解。也就是说,它总是考虑所有的子问题,并选择继承能得到最优结果的那个,对暂时没有继承的子问题,由于重叠子问题的存在,后期可能再次考虑它们,一次还有机会成为全局最优的一部分,不需要放弃。
由此可以看出贪心是一种壮士断腕的决策,只要进行了选择就不后悔;动态规划则是要看哪个选择笑到了最后,暂时的领先说明不了什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值