Algorithm 最大值调度算法
我有一份项目清单,每个项目需要你整整两天才能完成,并且有一个截止日期。让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-证明算法是最优的?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天
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,我会编辑我的答案。