基本的に、私はアイテムのリストを持っています。これには、他の多くのアイテムに最適な方法で適合する必要があるサイズと値のパラメーターがあり、可能な限り最高の値に到達しますが、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);
}
}
}
私がやりたいことは、再帰を行うときにすでに計算された値を取得することです。
時間の複雑さを軽減するためにこれを行うための最も簡単でスマートな方法は何でしょうか?