区间调度-贪心算法

一、  找到数目尽可能多的相容任务

假设每个任务j从sj开始到fj结束。若要找到尽可能多的相容任务,只需要将所有任务按照结束时间排序,每次都选择最早结束的那个任务。

因为每次选最早结束的,则留给之后的时间就越多。在余下的时间中与被选的那个任务冲突的任务最多也只能有一个被选(代替现在被选的这个任务),但是留下的时间却更少了,所以一定没有现在这个选法优。

二、 区间划分问题

假设有好多个演讲在不同的时间进行,可能会导致冲突,请你选择用最少的教室来避免冲突。

我们定义“深度”这个概念:通过时间线上任何一点的最大区间数。   就是说重合区间的最大个数。由于重合的区间必然不能安排在一个教室,所以安排的教室数必然不小于区间集合的深度。

那么,安排的算法如下:

假设区间集合的深度为d,有1,2…d个标签。

先将所有区间按照开始时间排序,为  I1 I2 I3 … In  。由深度的定义可以知道每个区间最终一定会被分配一个标签,否则说明这个区间至少和d个区间冲突了,那么这个深度也就不是d了。分配的策略为:
按照顺序1到n,对每一个区间Ii 为它分配的标签号不与和它冲突的区间的标签号想同即可。(所以分配的方法也就不唯一)。

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/KopM1/article/details/53994055
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞