诊断动态编程与优先级队列情况

时间:2014-09-15 08:00:48

标签: algorithm recursion dynamic-programming priority-queue

我正在尝试确定是否可以使用DP或优先级队列解决以下问题:

1)我有一组对象。我的目标是选择足够的分数来给我最高分,同时实现约束。

2)每个物体的特征。每个对象都有一个分数和与之相关的深度。

3)约束:最终对象集的深度总和必须<= 100

例如

  

指数/分数/深度(以下数字如下)

     

1 70 10

     

2 60 30

     

3 40 50

     

4 40 25

     

5 30 35

这些可能的输出可以是

  

得分总和/深度总和(相应数字如下)

     

170 90(即对象1,2,3)

     

200 100(即对象1,2,4,5) - 获胜者

     

130 90(即对象2,4,5)

     

150 85(即物体1,3,4)

     

140 95(即物体1,3,5)

以上表明,贪婪的方法不会起作用,即总是得分最高或成本最低。例如,拍摄物体4,5(总得分70,总深度60)优于仅采用物体3(得分40成本50)。因此,直接的方法不起作用,我需要探索我的整个搜索空间。所以看起来好像优先队列不起作用,不是吗? DP怎么样?有没有办法在这里应用动态编程?

1 个答案:

答案 0 :(得分:1)

所述问题是经典背包问题的重新形成,众所周知,动态编程可以解决这个问题。有关详细信息,请参阅this Wikipedia文章。使用优先级队列的方法很可能会导致贪婪算法,可以对其进行细化以产生2近似。更确切地说,物品可以按效率分类并贪婪地使用,直到下一个物品不再适合。然后从这个解决方案和最有利可图的项目中获益。