仅做学习记录,具体可参照 https://www.cnblogs.com/xsyfl/p/6938642.html 写的很好。
所谓贪心算法就是 在每一次的求解中 ,都使用最佳操作,这样所有步骤的求解 组合起来就是 全局的最优解。。
比如一个会议室如何最大利用。找零。
假设有n个会议要使用会议室,假设每个会议都有开始时间Sn 和 结束时间 Fn . 必须满足其上一个会议的结束时间小于改会议的开始时间。
我们假定一个会议越早结束,那么后面我越能安排更多的会议。
所以先把所有会议按照结束时间排序 升序。
1. 第一个是最早结束的会议。
2. 找到开始时间小于第一步结束时间 , 且最早结束的会议。
3. 依次求解, 组合起来即为最优解。
伪代码:
List<actvie> res ; 存放最优解
List<Active> as ; //会议集合
as.sort 按结束时间排序
res.add(as[0]) ;// 作为第一个最佳解
time = as[0].endtime 第一个元素的结束时间作为最早结束时间
for ( i = 1 ,i < as.length ; i++)
if as[i].startTime > time
res .add (as[i])
time = as[i].endtime