【问题标题】:maximum value scheduling algorithm [closed]最大值调度算法
【发布时间】:2012-05-07 22:30:19
【问题描述】:

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

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

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

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

【问题讨论】:

  • 虽然这可能是一个有趣的算法,但你做了什么来解决它?你在哪里卡住了?
  • 欢迎来到 SO! SO 社区不喜欢“gimme da codez”类型的“问题”。这可能就是您获得-1 票的原因。请尝试自己编写算法,如果遇到困难,请回来就一件事提出具体问题。
  • 你的问题是?如果你愿意为我做作业,答案是否定的。但是,如果你用谷歌的 bin 打包算法,你会发现比我更慷慨......

标签: algorithm scheduling time-complexity


【解决方案1】:

如果所有值都相同,这很简单,通过选择尽可能少的截止日期的贪婪方法效果很好。

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

创建一个大小为Max{due date}的数组,命名为V,这个数组保存了在特定时间可以获得的最大可能值,V中的每个值都有另一个数组,以将选定的任务保存在相关@ 987654324@,现在你有这个 DP 选择:

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

这里的 value_xi 表示到期日期等于或小于i 的最大值任务,而且这个任务不应该在 V[i-2] 选择中,之后更新 V[ i] 选择。

最后留给你完成作业,找出这个算法的顺序和它的正确性,你也可以提高内存使用率。

【讨论】:

  • @user1380782,我回答了不同的值,我只是提醒相同值的情况,对从这个算法开始有一个直觉,可能是我写的格式不好,现在你不清楚是我的睡眠时间,明天我会编辑它。
  • @user1380782,我会编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
相关资源
最近更新 更多