基本上我有一个项目列表,其中包含大小和值的参数,需要以最佳方式与许多其他项目相匹配,以达到可能的最高值但保持在 maxSize 以下。
要解释该问题,请参阅以下说明。
第 1 项:尺寸 1,价值 1;
项目 2:尺寸 2,价值 4:
最大尺寸:11;最佳解决方案:1xItem1、5xItem2。
但在这种情况下,限制更高,项目更多。我的问题是找到最好的组合。到目前为止,我已经创建了一个执行此操作的算法,但由于复杂性太差,它只适用于少数项目。
我基本上在尝试所有可能的组合,这会在更多数量的项目上创建大量计算。我将路径保存为字符串(Item2->Item2->Item1->Item2...),直到总大小高于限制。如果该值高于某个其他找到的值,则将其与字符串一起保存。
我想要做的是保存所有已经完成的计算,这里是一个例子。
A -> A -> A -> A -> A
A -> B -> A -> A -> A
最后一种情况,不需要重新计算A -> A -> A,我要做的就是把它存起来。
最好的方法是什么?
目前,我的递归看起来像这样
recursion(Item item, int size, int value, String s){
s += cust.getName() + "-";
if(value is bigger)
bestMix = s
for(Item item : itemList){
if(!(we break the limit){
recursion(item, size + item.getSize(), value + item.getValue(), s);
}
}
}
我想要做的是在进行递归时获取已经计算的值。
为了降低时间复杂度,最简单、最聪明的方法是什么?