挑选/排序算法(背包)

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

【讨论】:

以上是关于挑选/排序算法(背包)的主要内容,如果未能解决你的问题,请参考以下文章

Swift之算法:插入排序

数据结构和算法-排序算法-快速排序

快速排序算法原理与实现

算法设计

算法---冒泡排序法

漫画算法17初识快速排序