Python 中活动选择问题的贪心解法

2023-04-17 00:00:00 选择 贪心 解法

活动选择问题是指在一些活动中选择尽可能多的活动,使得这些活动不冲突,即它们的时间不重叠。这是一个经典的贪心问题,可以用贪心算法来求解。

贪心策略:按照活动结束时间升序排序,优先选择结束时间早的活动。

代码实现:

def activity_selection(start_time, end_time):
    n = len(start_time)
    activities = []
    for i in range(n):
        activities.append((start_time[i], end_time[i]))
    activities.sort(key=lambda x: x[1])  # 按结束时间升序排序
    selected = [activities[0]]  # 初始化选择第一个活动
    for i in range(1, n):
        if activities[i][0] >= selected[-1][1]:
            selected.append(activities[i])  # 选择不冲突的活动
    return [activities.index(activity) for activity in selected]  # 返回选择的活动在列表中的索引

# 示例
start_time = [1, 3, 0, 5, 8, 5]
end_time = [2, 4, 6, 7, 9, 9]
indices = activity_selection(start_time, end_time)
for i in indices:
    print("活动{}:开始时间{},结束时间{}".format(i, start_time[i], end_time[i]))

输出:

活动0:开始时间1,结束时间2
活动1:开始时间3,结束时间4
活动3:开始时间5,结束时间7
活动4:开始时间8,结束时间9

相关文章