每一步确定一个局部选择
一个优化问题可能有许多可行解。贪心方法先挑当前看来最合适的候选,删去与之不兼容的选项,再对剩余部分重复同样规则;它避免把所有候选组合都完整搜索一遍,因而常有较简洁的执行过程。
规则本身必须说清楚。最早开始、最早结束、最短持续时间,都是区间任务里不同的局部标准,不能因听起来都“节约资源”就互换。算法的正确性结论应绑定具体规则、约束和优化目标。
参考:[1]
区间调度中的交换论证
对单一资源上的不重叠区间,若目标是选出最多个任务,反复选择结束最早的可用区间是一条正确规则。它尽早空出资源,让后续任务拥有尽可能多的安排余地;选最早开始的长任务则可能阻挡许多较短任务。
证明不只依赖直觉:取一个最优安排,把它的首个区间换成结束不更晚的贪心首选,后面原有区间仍然可接入,任务数量不减少。随后对剩余可行区间重复论证,就把局部选择与某个完整最优解联系起来。
参考:[1]
目标改变时要重新证明
若每个任务有不同收益,目标改为收益总和最大,最早结束规则便不再普遍成立。一个很快结束但收益很小的任务,可能排挤价值高得多的重叠任务;原先关于数量的交换论证,也不能原封不动证明收益不减少。
最小生成树中的贪心规则有割性质作依据,带权区间调度则可用动态规划。实际方法都在做选择,区别在于局部确定后是否仍能保留某个全局最优解。对没有这种证明的贪心启发式,应把运行便利与最优性保证分别说明。