4.1 活动选择问题
1.问题的理解与描述
假定有n个需要使用同一个这样的资源的活动,每次只能有一个活动使用该资源。每一个活动有一个开始时间 si,一个完成时间 fi,其中0 ≤ si < fi < ∞。如果区间[si , fi)和[sj , fj)不相交,活动ai和aj是相容的(即如果si≥ fj 或 sj ≤ fi,ai和aj相容)。活动选择问题是选取一个由相容活动构成的最大集合。
输入:按完成时间排好序的活动开始时间数组s,完成时间数组 f。
输出:表示一个最大的相容活动组的向量{x1, x2, …, xn},其中
RECURSIVE-ACTIVITY-SELECTOR (s, f, i, j)
1 m ← i + 1
2 while m < j 且 sm < fi ?求Sij中的第一个活动
3 do xm←0
4 m ← m + 1
5 if m < j
6 then xm←1
7 RECURSIVE-ACTIVITY-SELECTOR (s, f, m, j)
算法运行时间:Θ(n)
5 C++代码实现
原文地址:http://blog.csdn.net/u010177286/article/details/46315725