ナップザック問題の非常に単純な貪欲アルゴリズムを書こうとしています。私の入力は2つの並列配列です。 1つの配列は項目の値を含み、もう1つの配列は重みを含みます。javaのナップザック欲張りアルゴリズム
私が作成しようとしている欲張りアルゴリズムは、次のようになります:どのアイテムが最高値であるかをチェックし、これをナップザックに入れます。次に、この項目の値をゼロに設定します。どのアイテムが最高の価値を持っているか再度確認し、ナップザックがまだそれを保持できる場合は、それをナップザックに入れてください。それを保持することができれば、値を再び0に設定して(値を入れた後に)再び最高値を探し始める。そのナップザックがこれ以上保持できない場合は、プログラムを終了してください。
私はそこに多くのより良い欲張りアルゴリズムがあることを知っていますが、これは私にとって非常に単純なものと思われ、私はこれを管理できると思います。私の問題は、最大値を見つけるために値配列全体を調べなければならないということです。それから私がそれを見つけたら、それをナップザックに入れ、その値をゼロに設定します。しかし問題は、新しい最高値アイテムを見つけてこれをナップザックに入れるためにforループに戻らなければならないということです。しかし、私はこれをどうやってやるのか分からない。
私はこれをJavaで書いています。
ありがとうございます。私は、貪欲なアルゴリズムを使ってナップザックを解決する方法がいくつかあることを知っています。そして、私はすでに値/重みの最高の比率を見ています。私はちょうど私が絶対初心者であるようにプログラミングで練習するためにすべての種類を試してみたかった。 最初にソートしてから繰り返し処理する問題は、私の体重指数が自分の値索引に対応しなくなったため、ナップザックの内側にまだフィットしているかどうかを私が確認できなくなることです。私はそれをやろうとしている方法がこの問題を回避する方法かもしれないと思った。 – Tezen
重みと値の間には対応があります(つまり、任意に並べ替えることはできません)。現時点では、重みと値を別々の配列に格納し、その対応関係を純粋に配列の順番で実行しようとしているように思えます。アイテムの値/重量を保持する単純なクラスを作成することで、その情報をカプセル化することができます。次に、どのウェイトと値が一緒に属しているかを手動で追跡することなくそれらのオブジェクトの配列を作成およびソートできます。 –