使用python的活动选择
我试图用贪婪算法解决活动选择问题。我的代码有些输入失败。我正在根据完成时间列表对活动列表进行排序 对于以下输入,代码工作失败: 活动列表=[1,2,3,4,5,6] 开始时间列表=[5,4,8,2,3,1] 完成时间列表=[13,6,16,7,5,4] 我的分类活动列表:[6,5,2,4,1,3] 预期产出:[6,1] 实际结果:[6]使用python的活动选择,python,algorithm,greedy,Python,Algorithm,Greedy,我试图用贪婪算法解决活动选择问题。我的代码有些输入失败。我正在根据完成时间列表对活动列表进行排序 对于以下输入,代码工作失败: 活动列表=[1,2,3,4,5,6] 开始时间列表=[5,4,8,2,3,1] 完成时间列表=[13,6,16,7,5,4] 我的分类活动列表:[6,5,2,4,1,3] 预期产出:[6,1] 实际结果:[6] 问题在于,在for循环中,您将每个开始时间与finish\u time\u列表[i]进行比较i=0,在这种情况下,finish\u time\u list[0]
问题在于,在
for
循环中,您将每个开始时间与finish\u time\u列表[i]
进行比较<每次循环运行时,code>i=0,在这种情况下,finish\u time\u list[0]
是13
,这是最后一个结束,因此if
永远不会变为真
另一个问题是,当j
通过start\u time\u list
时,您正在进行检查,但在activity\u tmp\u list
中添加了相同的j
,该列表已排序。因为它已被排序,所以活动索引不会像您希望的那样排列
更高层次的问题是,您只将活动编号存储在所选的数组中,而与活动开始或结束的时间无关。如果不知道有关已选择内容的信息,则无法决定是否添加其他活动。我建议制作一个包含标签、开始时间和结束时间的活动
类,或者制作一个2D矩阵,这样在它选择第一个活动之后,它看起来像[[6,1,4]]
,包含标签、开始位置和结束位置。或者,假设您希望保留贪婪算法,那么最简单的方法就是标签和结束时间
如果你还有其他问题,请告诉我
def find_maximum_activities(activity_list,start_time_list, finish_time_list):
selected =[]
activity_tmp_list = [x for _,x in sorted(zip(finish_time_list,activity_list))]
#the first activity is always selected
i=0
#print(i)
selected.append(activity_tmp_list[i])
#consider rest of Activities
for j in range(1,len(activity_list)):
if start_time_list[j]>=finish_time_list[i]:
print(j)
selected.append(activity_tmp_list[j])
i=j
return selected
activity_list=[1, 2, 3, 4, 5, 6]
start_time_list=[5, 4, 8, 2, 3, 1]
finish_time_list=[13, 6, 16, 7, 5, 4]
print("Activities:",activity_list)
print("Start time of the activities:",start_time_list)
print("Finishing time of the activities:", finish_time_list)
result=find_maximum_activities(activity_list,start_time_list, finish_time_list)
print("The maximum set of activities that can be completed:",result)