活动选择问题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) 计算一个日程安排,其中发生最多数量的活动。 解决方案: 使用贪心策略解决上述活动调度问题的示例如下所示 按结束时间的升序排列活动 ![]() ![]() 现在,安排 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 不互相干扰。 因此,最终的活动安排是 ![]() 下一主题分数背包问题 |
我们请求您订阅我们的新闻通讯以获取最新更新。