Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python的活动选择_Python_Algorithm_Greedy - Fatal编程技术网

使用python的活动选择

使用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]

我试图用贪婪算法解决活动选择问题。我的代码有些输入失败。我正在根据完成时间列表对活动列表进行排序

对于以下输入,代码工作失败:

活动列表=[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]
进行比较<每次循环运行时,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)