最大限度地降低捆绑更新的成本(反向背包?)

时间:2014-12-12 19:13:28

标签: java algorithm pseudocode knapsack-problem greedy

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

  

操作系统背后的公司通过提供安全更新   互联网。在某个特定时刻,有许多更新   开发,并为每次更新准备好日期。

     

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

     

为了最大限度地降低成本,该公司正在探索这种可能性   捆绑更新。捆绑包是附带的一系列更新   一个人去。捆绑的固定成本等于恒定成本   一次更新,但捆绑的可变成本被定义为   其中更新的可变成本之和。

     

捆绑更新可以因此降低不变成本,但它也有   缺点:推迟捆绑中的所有安全更新,直到   完整捆绑已准备好意味着用户的风险更长。这个风险是   建模为额外费用。从本质上讲,两者之间存在权衡   直接发送更新(具有高额不变成本)或   推迟并将其装运(具有高风险)。

     

假设更新按准备好的时间排序。假设   发布更新时,所有先前准备好的更新   也被运送(在同一捆绑或早期捆绑中)。该   公司想知道如何捆绑更新,以便总计   所有捆绑包的成本都降至最低。

提供以下信息:

  
      
  • 已编号的安全更新列表,按其准备就绪的日期排序(更新由1,2,...表示)
  •   
  • 运送捆绑包的不变成本
  •   
  • 每次更新,发货的可变成本
  •   
  • 对于每对更新,将所有更新从第一次更新推迟到第二次更新,直到第二次更新发货为止。
  •   

1 个答案:

答案 0 :(得分:1)

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

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