基本上,我有一個項目列表,其中包含大小和值的參數,需要以最佳方式適合大量其他項目,才能達到儘可能高的值,但保持在maxSize之下。保存已計算的值
要解釋該問題,請參閱以下說明。
項目1: 大小1,值1;
項目2: 尺寸2,值4:
最大值:11;最好的解決方案:1xItem1,5xItem2。
但在這種情況下,限制更高,項目更多。我的問題是要找到最好的組合。到目前爲止,我已經創建了一個這樣的算法,但是由於複雜性非常糟糕,它只適用於幾個項目。
我基本上都在嘗試每種可能的組合,這會在更多數量的項目上創建大量計算。我將路徑保存爲一個字符串(Item2-> Item2-> Item1-> Item2 ...),直到總大小高於極限。如果該值高於某個其他找到的值,則將其保存爲字符串。
我想要做的是保存所有已經完成的計算,這裏是一個例子。
A - > A - > A - > A - >甲
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);
}
}
}
我想要做的,就是取已經計算出的值做遞歸時。
什麼是最簡單最聰明的方法來降低時間複雜度?
謝謝。我正在考慮實施備忘錄,但不知道這是否正確。我會研究記憶並嘗試讓事情繼續下去。感謝您的答覆。 – oalsing