1 贪心算法概论
1.1 算法简介
“Greed . . . is good. Greed is right. Greed works.”
——Michael Douglas, Wall Street
对于一些问题,虽然动态规划能够解决,但是如果使用贪心算法,算法的复杂度将会大大降低。
如果我们想要使用贪心算法,那么问题需要满足贪心选择和最优子结构这两个条件。
-
最优子结构:
最优子结构指的是问题的最优解包含其子问题的最优解。
-
贪心选择:
所谓贪心选择,指的是该问题的解能够通过选择局部最优解得到。换句话说,就是在当前情景下,我们能够做出当前看来最优的选择。
下面以 会议安排 问题为例进行讲解:
问题讲解:a1, a2, a3… 分别表示会议,每场会议有开始时间si,结束时间ei,时间区间为[si, ei)。
问题为如何安排会议,使得在会议时间不发生冲突的情况下,参加的会议数量最多。
下面阐述该问题的最优子结构和贪心选择特性:
-
最优子结构:
设Sij为第i个会议结束之后,第j个会议开始之前,在这个区间段内的会议的集