ホームページ > バックエンド開発 > C++ > ナップサックアルゴリズムの最適解に含まれる特定の項目を取得するにはどうすればよいですか?

ナップサックアルゴリズムの最適解に含まれる特定の項目を取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-01 12:03:11
オリジナル
149 人が閲覧しました

How Can I Retrieve the Specific Items Included in the Optimal Solution of the Knapsack Algorithm?

ナップサック アルゴリズムからの要素の取得

ナップサック アルゴリズムは、制約のある項目のセットから達成可能な最適な値を効率的に決定します。ただし、どの項目がそれに寄与するのかは指定されず、合計値のみが提供されます。

最適解に含まれる特定の要素を取得するには、アルゴリズム内で次の手順に従います。

for (size_t j = 1; j <= n; j++)
{
    for ( int w = 1; w <= W; w++)
    {
        ...
        if (dp[w][j] != dp[w][j-1] && dp[w][j] == dp[w - items[j-1].getWeight()][j-1] + items[j-1].getWeight())
        {
            // Mark element 'j' as included in the solution
        }
    }
}
ログイン後にコピー

これステップでは、現在の値と以前の値を比較し、項目がいつソリューションに追加されたかを識別します。選択された要素により、連続する値の差がその重みに等しくなります。

または、アルゴリズムの実行後、行列を逆に走査して、選択された項目を決定することもできます:

int line = W;
int i = n;
while (i > 0):
    if (dp[line][i] - dp[line - weight(i)][i-1] == item[i].getValue()):
        // Item 'i' is in the solution
        i--;
        line -= weight(i);
    else:
        i--;
ログイン後にコピー

このアプローチは、最適な解決策に寄与する要素を効率的に取得し、問題の解決策についてより包括的な洞察を提供します。

以上がナップサックアルゴリズムの最適解に含まれる特定の項目を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート