挑选/排序算法(背包)
Posted
技术标签:
【中文标题】挑选/排序算法(背包)【英文标题】:Pick/Sort Algorithm (Knapsack) 【发布时间】:2015-08-05 00:55:31 【问题描述】:我遇到了我面临的任务的问题。我有一个数据库,其中包含所有具有“价格”值的项目。它们连接到不同的“回合”,并且“回合”具有“总价值”,其中这些项目“价格”-价值放在一起定义了“总价值”。所以,我想选择要赠送和保存的物品。 “总价值”的 5% 到 10% 应该被保存,其余的被放弃。
我可以选择该轮中的所有项目,按“价格”值排序,从最低到最高,然后:
if ($totSave < $totVal*0.1) addToSaveArray($item); $totSave += $item['price'];
但我也有一个应该优先考虑项目的列表,设置如下:
$prioList[] = array("name" => $list[$i], "price" => $price);
那么,最好的方法是什么?我是否会遍历 $prioList,检查是否有任何名称匹配,然后将价格添加到 $totSave 或您的看法?
非常感谢您的帮助!
【问题讨论】:
select sum(value) from table group by name
?
我不能真正做到这一点,因为我有一个优先级列表。但我把它缩小到“背包问题”。我会看看它是如何从这里开始的:)
“缩小”为 np 完全问题。玩得开心!
我认为你正在努力解决你的问题。根据您的数据库,只需一个查询即可完成。
问题是,这和背包问题一模一样。我现在想出了一个完美的解决方案!感谢您花时间回答我的问题! :)
【参考方案1】:
Jim 让我发布答案,这就是我正在做的事情 :) 由于这是一个背包问题,我在 Google 上搜索并找到了这个: https://github.com/acmeism/RosettaCodeData/tree/master/Task/Knapsack-problem-0-1/php
我也需要索引,所以我选择了顶部(有问题的)索引。 (由于低代表无法发布链接...)
由于那个有问题,我添加了一个“尝试”功能。这里是: http://pastebin.com/AycE4Kzm
【讨论】:
以上是关于挑选/排序算法(背包)的主要内容,如果未能解决你的问题,请参考以下文章