Java 最小化捆绑更新的成本(反向背包?)

Java 最小化捆绑更新的成本(反向背包?),java,algorithm,pseudocode,knapsack-problem,greedy,Java,Algorithm,Pseudocode,Knapsack Problem,Greedy,对于学校作业,我要为以下问题创建java代码,我想要一些关于伪代码的提示和帮助,而不是实际的java代码。它必须是递归的。就我个人而言,我认为这是背包问题的一种变体,或加权间隔调度。无论如何,这就是问题所在: 操作系统背后的公司通过 互联网在某个特定的时刻,会有一些更新 开发,并且对于每个更新,都知道准备就绪的日期 发布更新包含固定成本,每个成本相等 更新和可变成本,更新之间可能有所不同 为了最大限度地降低成本,该公司正在探索 捆绑更新。捆绑包是一系列随附的更新 一次成功。捆绑的固定成本等于固定

对于学校作业,我要为以下问题创建java代码,我想要一些关于伪代码的提示和帮助,而不是实际的java代码。它必须是递归的。就我个人而言,我认为这是背包问题的一种变体,或加权间隔调度。无论如何,这就是问题所在:

操作系统背后的公司通过 互联网在某个特定的时刻,会有一些更新 开发,并且对于每个更新,都知道准备就绪的日期

发布更新包含固定成本,每个成本相等 更新和可变成本,更新之间可能有所不同

为了最大限度地降低成本,该公司正在探索 捆绑更新。捆绑包是一系列随附的更新 一次成功。捆绑的固定成本等于固定成本 但捆绑包的可变成本定义为 其中更新的可变成本之和

因此,捆绑更新可以减少固定成本,但它也有好处 缺点:将捆绑包中的所有安全更新延迟到 完整的捆绑包准备就绪意味着用户的风险更大。这种风险是 模拟为额外成本。从本质上讲,两者之间存在权衡 直接发送更新(固定成本高)或 延迟并捆绑运输(高风险)

假设更新按准备好的时间排序。假定 在发布更新时,所有先前准备好的更新 也已装运(在同一捆绑包或更早的捆绑包中)。这个 公司想知道如何捆绑更新,这样总 将所有捆绑包的成本降至最低

提供了以下信息:

  • 编号的安全更新列表,按其准备就绪的日期排序(更新由1,2,…)表示)
  • 运送包裹的固定成本
  • 对于每一次更新,它的可变运输成本
  • 对于每对更新,将所有更新从第一次更新推迟到第二次更新的成本,直到第二次更新发布

考虑如何计算发送所有更新1到k的最小成本f(k)


这可以递归计算,但请确保记住函数调用的结果,否则您的复杂性将呈指数级增长。

今年没有圣诞礼物了……)谢谢你的回答,但是我想不出一个如何递归计算最小成本F(k)的方法…@ HeiTSME考虑最后一个包中会有多少更新。如果我们知道最后一个捆绑包中有x,那么成本将是f(k-x)+将最后一个x捆绑在一起的成本。