秒懂算法 | 活动安排问题贪心算法

举报
TiAmoZhang 发表于 2023/02/24 08:33:04 2023/02/24
【摘要】 通过例子分析求解活动安排问题的最好贪心策略、展示按照贪心策略求解该问题的过程。

640.jpg

活动安排问题来源于实际,无论任何与时间分配有关的问题都要考虑:如何安排来达到占用公共资源最少且花费时间最短的要求。


活动安排问题:设有n个活动的集合C={1,2,…,n},其中每个活动都要求使用同一个资源(如会议室),而在同一时间内只能有一个活动使用该资源。每个活动i都有要求使用该资源的起始时间si和结束时间fi,且si<fi。如果选择了活动i使用会议室,那么它在半开区间[si, fi)内占用该资源。如果[si, fi)与[sj,fj)不相交,那么活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。活动安排问题要求在所给的活动集合中选出最大的相容活动子集,也即尽可能选择更多的活动来使用资源。

01、问题分析——贪心策略

仔细审阅活动安排问题的已知条件和目标要求,我们得知:

(1) n个活动的集合C={1,2,…,n},即由活动编号组成的集合C。

(2) 活动i(i=1,2,…,n)的开始时间si。

(3) 活动i(i=1,2,…,n)的结束时间fi。

(4) 活动i(i=1,2,…,n)使用资源的时间fi-si。

(5) 活动i和活动j相容使用资源的条件:si≥fj或sj≥fi,如图1所示。

640.png

■ 图1 活动i和活动j相容示意


6) 满足相容条件的活动子集都是活动安排问题的解,含有活动个数最多的子集就是最优解。

(7) 问题目标:找集合C的最大相容子集,即最优解。

由此,要想实现问题的目标,在满足相容的条件下,我们讨论以下三种贪心策略:

(1) 开始时间早的活动优先安排。

(2) 结束时间早的活动优先安排。

(3) 使用时间短的活动优先安排。

那么,上述三种贪心策略哪个是最优的策略呢?我们看下面一个例子。
【例1】资源安排问题。
4个班级活动争用教室A,它们使用教室A的开始时间和结束时间如表1所示。

表1活动申请表

640.png

要求安排尽可能多的班级相容地使用教室A,该如何安排?


按照第一种贪心策略来安排,则1班使用教室A。

按照第二种贪心策略来安排,则2班先使用教室A,然后4班使用教室A。

按照第三种贪心策略来安排,则3班使用教室A。

通过简单对比,我们发现第二种贪心策略:结束时间早的活动优先安排是最佳策略。实际上,通过它们之间的关系:“结束时间=开始时间+使用时间”,我们可以推断:“开始时间越早,使用时间越短,则结束时间越早。”所以,结束时间早的活动优先安排的策略是最好的贪心策略。

02、实例构造

设有10个活动等待安排,这些活动的开始时间和结束时间如表2所示,用贪心算法找出满足目标要求的活动集合。

表2活动编号、开始时间和结束时间

640.png

第一步,将活动按照结束时间由小到大排序,排在第一位的2号活动被选择,如表3所示,结束时间为4。

表3第一阶段的贪心选择

640.png

第二步,在开始时间大于或等于4的活动集合中贪心选择,选3号活动,如表4所示,结束时间为7。


表4 第二阶段的贪心选择

640.png

第三步,在开始时间大于或等于7的活动集合中贪心选择,选7号活动,如表5所示,结束时间为11。


表5 第三阶段的贪心选择

640.png

第四步,在开始时间大于或等于11的活动集合中贪心选择,选10号活动,如表6所示,结束时间为14。此时,10号活动是最后一个位置的活动,算法结束。


表6 第四阶段的贪心选择

640.png

该实例的解为(0,1,1,0,0,0,1,0,0,1),即安排的活动集合为{2,3,7,10}。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。