python贪心算法的经典案例,并且请写出代码
时间: 2024-05-26 15:10:27 浏览: 74
浅谈Python实现贪心算法与活动安排问题
经典的贪心算法案例有很多,比如背包问题、活动安排问题等等。这里我介绍一下区间调度问题。
问题描述:
有 n 个活动,每个活动都有开始时间和结束时间,请问最多能安排多少个活动,使它们不冲突。也就是说,对于任意两个被选中的活动 i 和 j,它们的时间区间 [start_i, end_i] 和 [start_j, end_j] 必须没有重叠部分。
贪心思路:
我们可以按照活动的结束时间从早到晚排序,每次选择最早结束的活动,然后从剩下的活动中选择不与已选活动冲突的活动。这样可以保证每次选出的活动数最多。
代码实现:
def activity_selection(start, end):
# 按照结束时间排序
n = len(end)
indexes = list(range(n))
indexes.sort(key=lambda i: end[i])
# 贪心选择活动
selected = [indexes[0]]
for i in range(1, n):
if start[indexes[i]] >= end[selected[-1]]:
selected.append(indexes[i])
return selected
# 测试
start = [1, 3, 2, 5, 8, 5]
end = [4, 5, 6, 7, 9, 9]
selected = activity_selection(start, end)
print(selected) # 输出 [0, 1, 3, 4]
阅读全文