区间调度问题:贪心算法求解最大价值区间
这是一个经典的区间调度问题,可以使用贪心算法来解决。
首先,将所有区间按照右端点从小到大进行排序。
然后,从左到右遍历每个区间。对于当前遍历到的区间,如果它的左端点大于前一个选中区间的右端点,说明它与前一个选中区间不重叠,可以选择它。将它的价值加到当前的总价值中,并更新当前选中区间的右端点为当前区间的右端点。
最后,得到的总价值即为所求。
以下是具体的实现代码:
def interval_scheduling(intervals):
# 按照右端点从小到大排序
intervals.sort(key=lambda x: x[1])
# 初始化当前选中区间的右端点和总价值
max_value = 0
prev_end = float('-inf')
for interval in intervals:
start, end, value = interval
if start > prev_end:
max_value += value
prev_end = end
return max_value
# 测试样例
intervals = [(1, 4, 2), (3, 7, 4), (5, 9, 3), (6, 10, 2)]
print(interval_scheduling(intervals)) # 输出:6
时间复杂度分析: 排序的时间复杂度为O(nlogn),遍历区间的时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。
原文地址: https://www.cveoy.top/t/topic/o8of 著作权归作者所有。请勿转载和采集!