vlambda博客
学习文章列表

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

通过例子分析求解活动安排问题的最好贪心策略、展示按照贪心策略求解该问题的过程。


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

活动安排问题:设有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,如图2-1所示。


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

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


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

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

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

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

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

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

那么,上述三种贪心策略哪个是最优的策略呢?我们看下面一个例子。



【例2-3】资源安排问题。


4个班级活动争用教室A,它们使用教室A的开始时间和结束时间如表2-1所示。


表2-1活动申请表

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


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

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

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

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

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


02

实例构造


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


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

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


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


表2-3第一阶段的贪心选择

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


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


表2-4第二阶段的贪心选择

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


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


表2-5第三阶段的贪心选择

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


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


表2-6第四阶段的贪心选择

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


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


实例讲解

算法设计与分析(Python版)

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

精彩回顾

秒懂算法


下期预告

秒懂算法

哈夫曼编码贪心算法

Prim算法

Kruskal算法

选第二大元素的分治算法

快速排序算法中的分治思想

动态规划算法的基本思想

矩阵连乘问题

0-1背包问题的动态规划改进算法——跳跃点算法

子集树模型——0-1背包问题的回溯算法

满m叉树模型——图的m可着色问题的回溯算法

排列树模型——旅行商问题的分支限界法

最大网络流的增广路算法

蒙特卡罗算法



03

参考书籍

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

《算法设计与分析》

ISBN:9787302570721

定价:59.90元

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



04

精彩推荐








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