好的快速概述
我已经研究了背包问题
http://en.wikipedia.org/wiki/Knapsack_problem
我知道这是我的项目所需要的,但我项目的复杂部分是我需要在主袋内多次麻袋。
装有所有“袋子”的大背包只能携带x个“袋子”(举例来说就是9个)。每个包都有不同的值;
等等,所有这些值都是整数。让我们假设0-100。
内袋也将被分配一个类型,外袋中只能有一种类型,尽管程序输入将被赋予多个相同类型。
我需要指定主包可以容纳的最大重量,小包的所有其他属性需要按加权值分组。
实施例
外袋:
内袋:
程序将输入多个包,然后必须计算出更小的包的组合进入更大的包,根据输入将有多种解决方案,程序将为我输出最佳解决方案
我想知道你们认为对我来说最好的方法是什么。
我将用Java或C#编程。我很乐意用PHP编程,但我担心算法对于Web服务器效率非常低。
感谢您提供任何帮助
-Zack
答案 0 :(得分:2)
好吧,背包是NP难度的,所以我很确定这也是NP难的(如果不是你可以通过只用一个外袋来解决背包。)所以对于一个确切的最佳解决方案,你可能不会比搜索所有组合更好。所以你想要的程序大纲就像
for each possible combination
do
if current combination is better than best previous
save current combination as best so far
fi
od
并且运行时间将是指数级的。但是,听起来,您可以使用dynamic programming获得近乎解决方案。
答案 1 :(得分:0)