贪心算法,在解决最优化问题上,通过得到子问题的局部最优解来合成问题的一个解,以局部最优选择来输出一个全局最优解。
问题要用贪心算法来求解,需满足和动态规划一样的最优子结构特征,同时还需要再每个子问题最优解选择上具有贪心性质。所谓贪心性质,就是本来一个问题分成两个子问题求解,但现在只需要选择一个来求解,而这个子问题的局部最优就是全局最优。贪心了,只要解决一个子问题就解决了整个问题。
通过活动选择问题来说明如何通过动态规划解转化为贪心解。活动选择问题在现实中有很多实际应用场合,记得在大学时,各类学生社团经常要共用某一类公共场合来举办活动或会议,这个时候就要协调出合理的安排,最大化满足社团对资源的需求。用数学模型来描述,就是n个活动集合{a1,a2,…,an}要排斥使用公共资源,如果以活动开始时间和结束时间作为占用资源的标志量,那么就是要求解这个集合中最大子集可以最大化使用这个资源。活动选择问题就是要选择出一个由互相兼容的问题组成的最大子集合。
针对活动选择问题,按照动态规划解决的第一步就是寻找最优子结构。假设Sij为活动的子集,ak为其中一个活动,sk和fk分别为活动的开始时间和结束时间,数学模型描述如下:
这个发现就是说,最