选择/排序算法(背包)


Pick/Sort Algorithm (Knapsack)

我遇到了一个问题,我面临的任务。我有一个数据库,其中的项目都有一个"价格"值。它们与不同的"回合"相连,"回合"有一个"总价值",而这些"价格"价值组合在一起定义了"总价值"。所以,我想选择哪些东西要送人,哪些要保存。"总价值"的5%到10%应该存起来,其余的捐出去。

我可以选择那一轮中的所有商品,按"价格"-价值,从低到高排序,然后:

if ($totSave < $totVal*0.1) { addToSaveArray($item); $totSave += $item['price']; } 

但我也有一个列表,应该优先考虑项目,设置如下:

$prioList[] = array("name" => $list[$i], "price" => $price);

那么,最好的方法是什么?我应该循环遍历$prioList,检查是否有匹配的名称,然后将价格添加到$totSave中吗?

帮助将非常感激!

Jim让我张贴答案,所以这就是我正在做的:)因为这是一个背包问题,我谷歌了一下,发现了这个:https://github.com/acmeism/RosettaCodeData/tree/master/Task/Knapsack-problem-0-1/PHP

我也需要索引,所以我选择了最上面的(有bug的)索引。(无法发布链接,由于低rep…)

由于那个有bug,我添加了一个"try"函数。下面是:http://pastebin.com/AycE4Kzm