定义及原理
和动态规划算法相比,贪心算法是一种更简单、更高效的算法。它在每一步都住处当时看起来最佳的选择,也就是说,它总是做出局部最优的选择,寄希望于这样的选择能导出全局最优解。
贪心算法并不能保证得到最优解,但是对于一些问题,确实可以得到最优解。
一个贪心算法能够求解一个最优化问题的两个关键因素是:贪心选择性质和最优子结构。
贪心选择性质即可以通过做出局部最优选择来构造全局最优解。
最优子结构性质,即一个问题的最优解包含其子问题的最优解。
活动选择问题
问题描述及分析
假定有一个n个活动的集合S={a1,a2,……,an}。这些活动都使用同一个资源,而这个资源在同一时间只能被一个活动使用(比如教室)。每一个活动ai有一个开始时间si和一个结束时间fi。开始时间早于结束时间。即活动在时间[si,fi)区间内执行。所以只要两个活动的执行区间不重叠,就兼容。
用Sij表示在ai结束之后开始,且在aj开始之前结束的那些活动的集合。用c[i, j]表示集合Sij的最优解的大小。推出公式如下:
有这个公式,我们