要想清楚两者的区别,首先就要了解两者的基本概念与性质。
- 贪心算法
基本思想:贪心算法并不从整体最优上加以考虑,它所做的选择只是在某种意义上的局部最优解。
基本要素:最优子结构性质和贪心选择性质。
最优子结构性质
问题的整体最优解中包含子问题的最优解
贪心选择性质
l 整体的最优解可通过一系列局部最优解达到
l 每次的选择可依赖以前作出的选择,但不依赖后续选择
- 动态规划
基本思想:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
基本要素:最优子结构性质和重叠子问题性质
- 贪心算法与动态规划的区别
共同点:两者都具有最优子结构性质
不同点:1) 动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有在解出相关子问题时才能做出选择。而贪心算法,仅在当前状态下做出最好选择,即局部最优选择,然后再去解做出这个选择后产生的相应的子问题。
2) 动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常自顶向下的方式进行。
附上一个某一问题具有贪心选择性质的证明过程:
基本思想:首先考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始。
活动安排问题:问题描述:
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。
贪心选择性质证明:
设E中活动已按结束时间非减序排列,
是所给活动安排的一个最优解。A也是非减序排列且第一个活动为活动k。
1) 当k=1时,则A就是一个以贪心选择开始的最优解。
2) 当k>1时,
由于,且A中活动是相容的,所以B中的活动也是相容的。又由于B中活动个数与A中的活动个数相同,且A是最优的,故B也是最优的。也就是说,B是以活动1开始的最优活动安排。所以,活动安排问题具有贪心选择性质。
这是个人在学习贪心算法时的一个小总结,如果存在什么问题欢迎在评论区留言