C# を使用してナップザック問題アルゴリズムを作成する方法
C# を使用してナップサック問題アルゴリズムを作成する方法
ナップサック問題 (ナップサック問題) は、指定された容量のナップサックを記述する古典的な組み合わせ最適化問題です。それぞれが独自の価値と重みを持つアイテムのコレクション。目標は、バックパックの容量を超えずに、バックパックに詰めたアイテムの合計価値を最大化する最適な戦略を見つけることです。
C# では、動的プログラミングによってナップザック問題を解決できます。具体的な実装は次のとおりです。
using System; namespace KnapsackProblem { class Program { static int Knapsack(int[] weights, int[] values, int capacity, int n) { int[,] dp = new int[n + 1, capacity + 1]; for (int i = 0; i <= n; i++) { for (int j = 0; j <= capacity; j++) { if (i == 0 || j == 0) dp[i, j] = 0; else if (weights[i - 1] <= j) dp[i, j] = Math.Max(values[i - 1] + dp[i - 1, j - weights[i - 1]], dp[i - 1, j]); else dp[i, j] = dp[i - 1, j]; } } return dp[n, capacity]; } static void Main(string[] args) { int[] weights = { 5, 3, 4, 2 }; int[] values = { 60, 50, 70, 30 }; int capacity = 8; int n = weights.Length; int maxValue = Knapsack(weights, values, capacity, n); Console.WriteLine("背包能装入的最大价值为:" + maxValue); } } }
上記のコードでは、アイテムの重み配列 weights
とアイテムの値を受け取る Knapsack
という名前の静的メソッドを定義します。 arrayvalues
、バックパック容量capacity
、アイテム数n
がパラメータとして使用されます。このメソッドでは、状態遷移表を表すために 2 次元配列 dp
が使用されています。dp[i, j]
は、最初の i
項目のうち、バックパックの容量は j
で積載可能な最大値です。
次に、2 レベルのループを使用して状態遷移テーブルにデータを入力します。 i
または j
が 0 の場合は、アイテムがないか、バックパックの容量が 0 であることを意味します。このとき、バックパックに積める最大値は 0 です。アイテム i
の重量が現在のバックパック容量 j
以下の場合、アイテム i
を積むか、積まないかを選択できます。 item i
、2 つの最大値を dp[i, j]
の値として取得します。アイテム i
の重量がバックパックの容量 j
より大きい場合、アイテム i
を積まないことを選択することしかできません。
最後に、Main
メソッドで、サンプルのアイテム重量配列 weights
、アイテム値配列 values
、およびバックパック容量 容量を定義します。
を呼び出し、Knapsack
メソッドを呼び出してバックパックに積み込める最大値を計算し、結果を出力します。
上記の C# コード実装を通じて、バックパックの問題を簡単に解決し、最適なパッケージング ソリューションを得ることができます。もちろん、実際のアプリケーションでは、独自のニーズに応じてアルゴリズムを拡張および最適化することもできます。
以上がC# を使用してナップザック問題アルゴリズムを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。
