1、活动安排问题:设有n个活动的集合E=12…n其中每个活动都要求使用同一资源如演讲会场等而在同一时间内只有一个活动能使用这一资源。1 每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi且sifi 。如果选择了活动i则它在半开时间区间si fi内占用资源。2 若区间si fi与区间sj fj不相交则称活动i与活动j是相容的。也就是说当si≥fj或sj≥fi时活动i与活动j相容。运行结
本题需要设计一个贪心算法,按照活动结束时间从早到晚的顺序进行选择。
具体步骤如下:
- 将所有活动按照结束时间从早到晚排序。
- 选择第一个活动,并记录其结束时间作为当前时间。
- 从剩余的活动中选择一个开始时间晚于或等于当前时间的活动(即下一个相容的活动),并将其结束时间作为当前时间。
- 重复步骤3,直到所有活动都被选完或者没有与当前时间相容的活动。
具体实现如下(假设活动按照结束时间从早到晚排列):
function activitySelection(s, f, n): selected = [1] // 选择第一个活动 current = f[0] // 记录当前时间为第一个活动的结束时间 for i in range(1, n): if s[i] >= current: // 如果下一个活动的开始时间晚于或等于当前时间 selected.append(i+1) // 选择该活动 current = f[i] // 更新当前时间为该活动的结束时间 return selected
其中,s和f分别为长度为n的数组,表示每个活动的起始时间和结束时间。selected为一个列表,表示选中的活动编号
原文地址: https://www.cveoy.top/t/topic/eHxW 著作权归作者所有。请勿转载和采集!