Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
Algorithm 最大值调度算法_Algorithm_Scheduling_Time Complexity - Fatal编程技术网

Algorithm 最大值调度算法

Algorithm 最大值调度算法,algorithm,scheduling,time-complexity,Algorithm,Scheduling,Time Complexity,我有一份项目清单,每个项目需要你整整两天才能完成,并且有一个截止日期。让P[i].id、P[i].duedate和P[i].value作为项目的id、项目的到期日,以及如果您按时完成项目(到期日当天或之前)所获得的值 write一种算法,它将数组A作为输入,并返回您将执行哪些项目以及何时执行的计划,以最大化您获得的价值。 该算法的输出是一个数组B,因此B[i]是您将在第i天处理的项目的id,i>=1 在一个特定的日期内不能有多个项目,除非您在截止日期前完成,否则您不会得到项目的价值,今天是第0天

我有一份项目清单,每个项目需要你整整两天才能完成,并且有一个截止日期。让P[i].id、P[i].duedate和P[i].value作为项目的id、项目的到期日,以及如果您按时完成项目(到期日当天或之前)所获得的值

write一种算法,它将数组A作为输入,并返回您将执行哪些项目以及何时执行的计划,以最大化您获得的价值。 该算法的输出是一个数组B,因此B[i]是您将在第i天处理的项目的id,i>=1

在一个特定的日期内不能有多个项目,除非您在截止日期前完成,否则您不会得到项目的价值,今天是第0天,您将从第1天开始处理项目(截止日期是整数),例如,如果项目的截止日期是5,您可以选择在第3天和第5天处理)

1-编写算法。 2-证明算法是最优的?
3-算法的时间复杂度是多少?

如果所有值都相同,那么选择尽可能少的截止日期的贪婪方法很简单

当值不同时,您可以使用类似的方法,但这次是通过动态规划(我假设您的到期日是离散的)

创建一个大小为
Max{due date}
的数组,将其命名为
V
,此数组保存在特定时间内可以获得的最大可能值,并为
V
中的每个值创建另一个数组,以将所选任务保存在相关的
V[i]
中,现在您有了此DP选项:

V[0]=0,V[1]=max{value_x1,V[i]=max{V[i-2]+value_xi,V[i-1]}

此处值_xi表示到期日等于或小于
i
的最大值任务,并且在更新V[i]选择之后,此任务不应在V[i-2]选择中


最后,我将让您通过查找此算法的顺序及其正确性来完成您的家庭作业,您还可以提高内存使用率。

虽然这可能是一个有趣的算法,但您做了什么来解决它?您遇到了什么问题?欢迎使用SO!SO社区不喜欢“gimme da codez”类型的“问题”。这可能就是你获得-1票的原因。请试着自己编写算法,如果你陷入困境,回来问一个关于一件事的具体问题。你的问题是?如果是你愿意帮我做作业,答案是否定的。但是如果你用谷歌搜索垃圾箱打包算法,你会发现比我慷慨得多…@user1380782,我回答对于不同的值,我只是提醒同一个值的情况下,有一个直觉,从这个算法开始,可能是我写的格式不好,你不清楚,现在是我的睡眠时间,明天我会编辑它。@user1380782,我会编辑我的答案。