活动选择问题

17 Mar 2025 | 阅读 2 分钟

活动选择问题是一个数学优化问题。我们的第一个例子是关于在几个挑战活动中安排资源的问题。我们发现贪心算法提供了一种设计良好且简单的方法,用于选择最大大小的一组手动兼容的活动。

假设 S = {1, 2....n} 是 n 个提议活动的集合。这些活动共享资源,这些资源一次只能被一个活动使用,例如,网球场,演讲厅等。每个活动“i”都有 开始时间 si结束时间 fi,其中 si ≤fi。如果选择活动“i”,则发生在半开时间间隔 [si,fi)。活动 i 和 j 是 兼容的,如果区间 (si, fi) 和 [si, fi) 不重叠(即,如果 si ≥fi 或 si ≥fi,则 i 和 j 兼容)。活动选择问题选择最大大小的相互一致的活动集合。

贪心算法选择器算法

GREEDY- ACTIVITY SELECTOR (s, f)
1. n ← length [s]
2. A ← {1}
3. j ← 1.
4. for i ← 2 to n
5. do if si ≥ fi
6. then A ← A ∪ {i}
7. j ← i
8. return A

示例: 给定 10 个活动以及它们的开始和结束时间,如下所示

S = (A1 A2 A3 A4 A5 A6 A7 A8 A9 A10)
Si = (1,2,3,4,7,8,9,9,11,12)
fi = (3,5,4,7,10,9,11,13,12,14)

计算一个日程安排,其中发生最多数量的活动。

解决方案: 使用贪心策略解决上述活动调度问题的示例如下所示

按结束时间的升序排列活动

Activity Selection Problem
Activity Selection Problem

现在,安排 A1

接下来安排 A3,因为 A1 和 A3 不互相干扰。

接下来 跳过 A2,因为它会干扰。

接下来,安排 A4,因为 A1 A3 和 A4 不互相干扰,然后接下来,安排 A6,因为 A1 A3 A4 和 A6 不互相干扰。

跳过 A5,因为它会干扰。

接下来,安排 A7,因为 A1 A3 A4 A6 和 A7 不互相干扰。

接下来,安排 A9,因为 A1 A3 A4 A6 A7 和 A9 不互相干扰。

跳过 A8,因为它会干扰。

接下来,安排 A10,因为 A1 A3 A4 A6 A7 A9 和 A10 不互相干扰。

因此,最终的活动安排是

Activity Selection Problem
下一主题分数背包问题