
(解決策: 各本が任意の数だけ入手可能な場合は、黄色の本が 3 冊、灰色の本が 3 冊。表示されている本だけが入手可能な場合は、緑の本を除くすべての本。)
ナップサック問題とは、組合せ最適化における次の問題です。
- それぞれに重みと値を持つアイテムのセットが与えられた場合、合計重みが指定された制限以下になり、合計値が可能な限り大きくなるように、コレクションに含めるアイテムを決定します。
この名前は、固定サイズのナップザックに制約され、最も価値のあるアイテムを詰め込まなければならない人が直面する問題に由来しています。この問題は、意思決定者が固定予算または時間制約の下で、分割できない一連のプロジェクトまたはタスクから選択しなければならないリソース割り当てでよく発生します。
ナップザック問題は1世紀以上にわたって研究されており、初期の研究は1897年にまで遡ります。[1]
アプリケーション
ナップザック問題は、原材料を最も無駄なくカットする方法を見つけること、[2]、投資やポートフォリオの選択、[3]、資産担保証券化のための資産の選択、[4] 、 Merkle-Hellman [5]やその他のナップザック暗号システムの鍵生成など、さまざまな分野の現実世界の意思決定プロセスに登場します。
ナップサック アルゴリズムの初期の応用例の 1 つは、受験者がどの質問に答えるかを選択できるテストの作成と採点でした。小規模な例では、受験者にそのような選択肢を提供するのはかなり簡単なプロセスです。たとえば、試験に 10 点の質問が 12 問含まれている場合、受験者は 10 問に答えるだけで最高得点の 100 点を得ることができます。ただし、点数が不均一に分布しているテストでは、選択肢を提供するのが難しくなります。Feuerman と Weiss は、合計 125 点の不均一なテストを学生に提供するシステムを提案しました。学生は、すべての質問に全力で答えるように求められます。ナップサック アルゴリズムは、合計点数が 100 になる問題の可能なサブセットのうち、どのサブセットが各学生に最高得点を与えるかを決定します。[6]
ストーニーブルック大学アルゴリズムリポジトリの1999年の調査によると、組み合わせアルゴリズムとアルゴリズムエンジニアリングの分野に関連する75のアルゴリズム問題のうち、ナップサック問題は19番目に人気があり、サフィックスツリーとビンパッキング問題に次いで3番目に必要とされていることが示されました。[7]
意味
最も一般的に解決されている問題は、0-1ナップサック問題であり、これは各種類のアイテムのコピー数を0または1に制限するものです。1から までの番号が付けられたアイテムのセットがあり、それぞれに重量と価値があり、最大重量容量が与えられている場合、
- 最大化する
- および の対象となります。
ここでは、ナップザックに入れるアイテムのインスタンスの数を表します。非公式には、問題は、重量の合計がナップザックの容量以下になるように、ナップザック内のアイテムの値の合計を最大化することです。
制限付きナップサック問題( BKP )では、各アイテムが 1 つしかないという制限がなくなりますが、各種類のアイテムのコピー数は最大の非負の整数値に制限されます。
- 最大化する
- 以下に従う
無制限ナップサック問題( UKP )では、各種類のアイテムのコピー数に上限はなく、唯一の制限はそれが非負の整数であるという点を除いて、上記のように定式化できます。
- 最大化する
- 以下に従う
無制限ナップサック問題の一例は、この記事の冒頭に示した図と、その図の説明にある「各書籍が任意の数入手可能な場合」というテキストを使用して示されます。
計算の複雑さ
ナップサック問題は、コンピュータサイエンスの観点から見ると、多くの理由から興味深いものです。
- ナップサック問題の決定問題形式 (重みWを超えずに少なくとも V の値を達成できるか? )はNP 完全であるため、すべての場合に正確かつ高速 (多項式時間) なアルゴリズムは知られていません。
- 与えられた解が最適かどうか(つまり、より大きなVを持つ解が存在しないかどうか)を判断できる多項式アルゴリズムは知られていません。この問題は共NP完全です。
- 動的計画法を使用した疑似多項式時間アルゴリズムがあります。
- 以下に説明するように、擬似多項式時間アルゴリズムをサブルーチンとして使用する、完全な多項式時間近似スキームがあります。
- 実際に発生する多くのケースや、一部の分布からの「ランダムなインスタンス」は、それでも正確に解決できます。
「決定」問題と「最適化」問題の間には関連があり、「決定」問題を解決する多項式アルゴリズムが存在する場合、k の値を増やしながらこのアルゴリズムを繰り返し適用することで、最適化問題の最大値を多項式時間で見つけることができます。一方、アルゴリズムが最適化問題の最適値を多項式時間で見つける場合、このアルゴリズムによって出力されたソリューションの値と k の値を比較することで、決定問題を多項式時間で解決できます。したがって、両方のバージョンの問題は同様の難しさです。
研究文献のテーマの 1 つは、ナップザック問題の「難しい」インスタンスがどのようなものかを特定することです[8] [9] [10] 。または別の見方をすれば、インスタンスの実際の特性によって、最悪の NP 完全動作が示唆するよりもインスタンスがより扱いやすくなる可能性があるかどうかを特定することです[11] [12] 。これらの「難しい」インスタンスを見つける目的は、Merkle–Hellman ナップザック暗号システムなどの公開鍵暗号システムで使用することです。より一般的には、最適化問題のインスタンスの空間構造をよりよく理解することで、特定の問題の研究が進み、アルゴリズムの選択が改善されます。
さらに、ナップサック問題の難しさは入力の形式に依存するという事実も注目に値する。重みと利益が整数として与えられた場合、それは弱NP完全であるが、重みと利益が有理数として与えられた場合は強くNP完全である。[13]しかし、重みと利益が有理数の場合でも、完全に多項式時間の近似スキームが許容される。
単位コストモデル
ナップサック問題の NP 困難性は、整数のサイズが問題となる計算モデル (チューリング マシンなど) に関連しています。対照的に、決定木は各決定を 1 つのステップとしてカウントします。Dobkin と Lipton [14]は、ナップサック問題の線形決定木、つまり決定ノードがアフィン関数の符号をテストする木に対する下限を示しています。[15]これは、Steele と Yao によって代数決定木に一般化されました。[16] 問題の要素が実数または有理数の場合、決定木の下限は、実数の加算、減算、乗算、比較、および除算または剰余 (「床」) を含む命令セットを備えた実際のランダム アクセス マシンモデルにまで拡張されます。 [17]このモデルは、テーブルへのインデックスを使用するアルゴリズムを包含するため、代数決定木モデルよりも多くのアルゴリズムをカバーします。ただし、このモデルでは、決定だけでなく、すべてのプログラム ステップがカウントされます。決定木モデルの上限は、マイヤー・アウフ・デア・ハイデ[18]によって与えられ、彼は、任意のnに対して、 n個の項目を持つ部分集合和問題を解決するO ( n4 )の深さの線形決定木が存在することを示しました。これは、任意のnに対して問題を解決するアルゴリズムの上限を意味するものではないことに注意してください。
解決する
ナップサック問題を解くアルゴリズムはいくつかあり、動的計画法[19] 、分岐限定法[20]、または両方のアプローチのハイブリッド[11] [21] [22] [23]に基づいている。
動的プログラミング事前アルゴリズム
無制限ナップサック問題(UKP )は、各種類のアイテムのコピー数に制限を設けません。また、ここでは
- 以下に従う
には次の特性がある ことに注意してください。
1. (ゼロ項目の合計、つまり空集合の合計)。
2. 、、ここで は- 番目の種類のアイテム の値です。
2 番目のプロパティについては詳しく説明する必要があります。このメソッドの実行プロセス中に、重みをどのように取得するのでしょうか。方法は 2 つしかなく、以前の重みは、さまざまなアイテムの合計種類がある場合です (異なるとは、重みと値が完全に同じではないことを意味します)。これらのアイテムの各値と関連する最大値が事前にわかっている場合は、それらを互いに比較して最終的に最大値を取得すれば完了です。
ここで、空集合の最大値は 0 とします。から までの結果を集計すると、解が得られます。 それぞれの計算には最大で 個の項目の検査が含まれ、計算するの値は最大で 個あるため、動的計画法の解の実行時間は です。最大公約数で割ると、実行時間を短縮できます。
P≠NPの場合でも、複雑度はナップサック問題がNP 完全であるという事実と矛盾しません。これは、 とは異なり、 は問題への入力の長さの多項式ではないためです。問題への入力の長さは、 のビット数に比例し、それ自体には比例しません。ただし、この実行時間は擬似多項式であるため、ナップサック問題 (の決定バージョン) は弱 NP 完全問題になります。
0-1 ナップサック問題

0-1 ナップサック問題に対する同様の動的プログラミング ソリューションも、擬似多項式時間で実行されます。 は厳密に正の整数であると仮定します。 を、(最初のアイテム)までのアイテムを使用して と等しいかそれ以下の重みで達成できる最大値として定義します。
再帰的に次のように定義できます。(定義A)
- (新しいアイテムが現在の重量制限を超えている場合)
- もし。
解は を計算することで求められます。これを効率的に行うために、以前の計算結果を保存するテーブルを使用できます。
以下は動的プログラムの疑似コードです。
// 入力:
// 値(配列 v に格納)
// 重み(配列 w に格納)
// 異なる項目の数 (n)
// ナップザック容量 (W)
// 注意: 配列 "v" と配列 "w" には、インデックス 1 から始まるすべての関連する値が格納されると想定されます。
配列m [ 0. . n , 0. . W ];
jが0からWまでの場合、以下を実行します。
m [ 0 , j ] := 0
1からnまでのiに対して以下を実行します。
m [ i , 0 ] := 0
1からnまでのiに対して以下を実行します。
jが1からWまでの場合、以下を実行します。
w [ i ] > jの場合:
m [ i , j ] := m [ i -1 , j ]
それ以外:
m [ i , j ] := max ( m [ i -1 , j ], m [ i -1 , j - w [ i ]] + v [ i ])
したがって、このソリューションは時間と空間で実行されます。(値 m[n,W] のみが必要な場合は、配列 "m" の最新の 2 行を格納するために必要なメモリ量が O(W) になるようにコードを変更できます。)
しかし、もう 1 つか 2 つ進めば、メソッドは から までの間に実行されることがわかります。定義Aから、アイテムの数と選択したアイテム自体が固定されている場合は、すべての重みを計算する必要がないことがわかります。つまり、上記のプログラムは、重みが 0 から W に頻繁に変化するため、必要以上に計算しています。この観点から、このメソッドを再帰的に実行するようにプログラムできます。
// 入力:
// 値(配列 v に格納)
// 重み(配列 w に格納)
// 異なる項目の数 (n)
// ナップザック容量 (W)
// 注意: 配列 "v" と配列 "w" には、インデックス 1 から始まるすべての関連する値が格納されると想定されます。
値[ n , W ]を定義する
すべての値を初期化する[ i , j ] = -1
m := ( i , j )を定義// 関数 m を定義して、次の条件で取得できる最大値を表すようにします: 最初の i 個のアイテムを使用し、合計重量制限は j です
{
i == 0またはj <= 0の場合:
値[ i , j ] = 0
戻る
if ( value [ i -1 , j ] == -1 ) then : // m[i-1, j] が計算されていないので、関数 m を呼び出す必要があります。
m ( i -1 , j )
if w [ i ] > j then : // アイテムはバッグに収まりきらない
値[ i , j ] =値[ i -1 , j ]
それ以外:
if ( value [ i -1 , j - w [ i ]] == -1 ) then : // m[i-1,jw[i]] が計算されていないので、関数 m を呼び出す必要があります。
m ( i -1 、j - w [ i ]) の
値[ i , j ] =最大値(値[ i -1 , j ],値[ i -1 , j - w [ i ]] + v [ i ])
}
m ( n , W )を実行する
たとえば、異なるアイテムが 10 個あり、重量制限が 67 であるとします。したがって、 上記の方法を使用して を計算すると、 を生成する呼び出しを除いて、次のようになります。
さらに、再帰を分割してツリーに変換することができます。次に、いくつかの葉を切り取り、並列コンピューティングを使用してこのメソッドの実行を高速化できます。
アイテムの合計値だけでなく、アイテムの実際のサブセットを見つけるには、上記の関数を実行した後にこれを実行できます。
/**
* 最適なナップザックのアイテムのインデックスを返します。
* i: 1からiまでのアイテムをナップザックに入れることができます
* j: ナップザックの最大重量
*/
関数ナップサック( i : int , j : int ) : Set <int> {
i == 0の場合:
戻る{}
m [ i , j ] > m [ i -1 , j ]の場合:
戻り値{ i } ∪ナップサック( i -1 , j - w [ i ])
それ以外:
ナップサック( i -1 , j )を返す
}
ナップザック( n , W )
中間点を見つける
0-1 ナップザックの別のアルゴリズムは 1974 年に発見され[24] 、暗号化における同様の名前のアルゴリズムとの類似性から「meet-in-the-middle」と呼ばれることもありますが、異なる項目の数に対して指数関数的ですが、がnに比べて大きい場合は DP アルゴリズムよりも適している可能性があります。特に、が非負であるが整数でない場合は、スケーリングと丸め (つまり、固定小数点演算を使用) によって動的計画法アルゴリズムを使用できますが、問題が正しい答えに到達するために小数桁の精度を必要とする場合は、を でスケーリングする必要があり、DP アルゴリズムにはスペースと時間が必要になります。
アルゴリズムMeet-in-the-middle は、入力:重みと値を持つアイテムのセット
です。
出力:サブセットの最大の組み合わせ値です。
集合{1... n }をほぼ同じ大きさの2つの集合AとBに分割する
各セットのすべてのサブセットの重みと値を計算する
Aの 各サブセットについて、合計重みがW未満となる最大値を持つB
のサブセットを見つけます。
これまでに見られた最大の合計値を追跡する
このアルゴリズムは空間を必要とし、ステップ 3 の効率的な実装 (たとえば、B のサブセットを重みでソートし、B のサブセットのうち、より大きいか等しい他のサブセットよりも重みが大きいものを破棄し、バイナリ検索を使用して最適な一致を見つける) により、実行時間は になります。暗号のmeet in the middle 攻撃と同様に、これは単純なブルート フォース手法 ( のすべてのサブセットを調べる) の実行時間を改善しますが、定数ではなく指数空間を使用するというコストがかかります ( baby-step giant-stepも参照)。Schroeppel と Shamir の Algorithm for Subset Sum からの洞察を使用した、meet-in-the-middle アルゴリズムの現在の最先端の改良は、結果として Knapsack のランダム化アルゴリズムを提供します。このアルゴリズムは(多項式因数まで) 実行時間を維持し、空間要件を まで削減します( [25]系 1.4 を参照)。対照的に、最もよく知られている決定論的アルゴリズムは、わずかに悪い という空間計算量で時間内に実行されます。[26]
近似アルゴリズム
ほとんどの NP 完全問題の場合、最適でなくても実行可能なソリューションを見つければ十分です。ただし、近似には、見つかったソリューションの値と最適ソリューションの値の差が保証されていることが望ましいです。
多くの有用だが計算が複雑なアルゴリズムと同様に、解を近似するアルゴリズムの作成と分析に関する研究が盛んに行われてきました。ナップサック問題はNP困難ではあるものの、指定された程度まで近似できるアルゴリズムの集合の1つです。つまり、この問題には多項式時間近似スキームがあります。正確に言うと、ナップサック問題には完全多項式時間近似スキーム(FPTAS)があります。[27]
貪欲近似アルゴリズム
ジョージ・ダンツィグは、無限ナップサック問題を解決するために貪欲 近似アルゴリズムを提案した。 [28]彼のバージョンでは、重量単位あたりの価値 の降順でアイテムをソートする。次に、最初の種類のアイテムをできるだけ多くコピーして、袋にスペースがなくなるまで袋に挿入する。各種類のアイテムの供給量が無制限であると仮定すると、が袋に収まるアイテムの最大値である場合、貪欲アルゴリズムは少なくとも の値を達成することが保証されます。
各種類のアイテムの供給が限られている有界問題の場合、上記のアルゴリズムは最適とはほど遠い可能性があります。それでも、簡単な変更でこのケースを解決できます。簡単にするために、すべてのアイテムが個別に袋に収まると仮定します (すべての に対して)。アイテムをできるだけ貪欲に詰め込むことで、つまりとなるようにソリューションを構築します。さらに、収まらなかった最初のアイテムを含む2 番目のソリューションを構築します。 は問題のLP 緩和の上限を提供するため、セットの 1 つは少なくとも の値を持つ必要があります。したがって、 と のうちより良い値を持つものを返して、 -近似を取得します。
平均性能は、誤差率[29]で分布の最適解に収束することが示される。
完全多項式時間近似スキーム
ナップサック問題に対する完全多項式時間近似スキーム(FPTAS) は、問題に多項式時間解法が知られていない理由は、アイテムに関連付けられた利益が制限されていないためであるという事実を利用しています。利益値のいくつかの最下位桁を切り捨てると、それらは多項式と 1/ε によって制限されます。ここで、ε は解の正確さの制限です。この制限は、アルゴリズムが最適解の係数 (1-ε) 以内の正確な解を多項式時間で見つけることができることを意味します。[27]
アルゴリズムFPTASは
入力される: ε ∈ (0,1]値、重み
で指定されたn個の項目のリストAの出力: S' FPTASソリューション
P := max // アイテムの最高値
K := ε
iから1まで、do
:= end for
上記の動的プログラムの値
を使用して、解S'を返します。
定理:上記のアルゴリズムによって計算された集合はを満たします。ここで は最適解です。
量子近似最適化
量子近似最適化アルゴリズム(QAOA)は、量子計算を使用してナップサック問題を解決するために使用することができ、問題のハミルトニアンを最小化します。ナップサックハミルトニアンは、制約条件をペナルティ項とともに問題のコスト関数に埋め込むことによって構築されます。 [30]ここで、はケース固有の微調整によって決定されるペナルティ定数です。
支配関係
無制限ナップサック問題を解くのは、必要のないアイテムを捨てることで簡単になります。 与えられたアイテム について、合計重量が の重量より小さく、合計値が の値より大きいアイテムのセットを見つけることができたとします。を含む潜在的なソリューションは、セット に置き換えることで常に改善できるため、 は最適ソリューションに現れません。 したがって、 番目のアイテムを完全に無視できます。 このような場合、はを支配すると言われます。 ( のアイテムをすでに使い果たしている可能性があるため、これは制限付きナップサック問題には適用されないことに注意してください。)
優位関係を見つけることで、探索空間のサイズを大幅に縮小することができます。優位関係にはいくつかの種類があり、[11]すべて次の形式の不等式を満たします。
、そして一部の人にとっては
ここで 、 および です。ベクトルはの各メンバーのコピー数を表します。
- 集団的支配
- 内のアイテムのいくつかの組み合わせの合計重みがw iより小さく、それらの合計値がv iより大きい場合、 -番目のアイテムは によって集合的に支配され、 と書き表されます。正式には、およびいくつかの に対して、すなわち となります。この支配を検証することは計算上困難なので、動的計画法のアプローチでのみ使用できます。実際、これは、、、およびアイテムが に制限されている、より小さなナップサック決定問題を解くことと同等です。
- 閾値優位性
- のいくつかのコピーが によって支配されている場合、番目のアイテムは によって閾値支配され、 と書き表されます。正式には、であり、いくつかのおよびに対して です。これは集団的支配の一般化であり、[19]で初めて導入され、EDUK アルゴリズムで使用されています。このような最小の はアイテム の閾値を定義し、 と書き表されます 。この場合、最適解には のコピーが最大で含まれます。
- 多重優位
- 番目の項目は、 がのいくつかのコピーによって支配されている場合、と表記される単一の項目 によって多重に支配されます。正式には、であり、ある、すなわちに対して です。この優位性は比較的簡単に検出できるため、前処理中に効率的に使用できます。
- モジュールの優位性
- を最良の項目、すなわちすべての に対してとします。これは値の密度が最大となる項目です。が のプラス複数コピーによって支配されている場合、- 番目の項目は単一の項目 によってモジュラ支配され、 と書き表されます。正式には、であり、 すなわち です。
バリエーション
ナップサック問題には、基本的な問題の膨大な応用から生まれた多くのバリエーションがあります。主なバリエーションは、アイテムの数、目的の数、ナップサックの数など、いくつかの問題パラメータの数を変更することで発生します。
多目的ナップサック問題
この変化により、ナップザックを詰める個人の目標が変わります。金銭的利益の最大化などの1つの目標ではなく、目標には複数の側面がある可能性があります。たとえば、環境や社会への懸念だけでなく、経済的目標もある可能性があります。頻繁に取り上げられる問題には、ポートフォリオと輸送ロジスティクスの最適化が含まれます。[31] [32]
たとえば、クルーズ船を経営しているとします。有名なコメディアンを何人雇うか決めなければなりません。この船は乗客を 1 トンまでしか乗せることができず、コメディアンの体重は 1,000 ポンド未満でなければなりません。コメディアンはそれぞれ体重があり、人気度に応じて仕事を持ち込み、特定の給料を要求します。この例では、複数の目的があります。もちろん、給料を最小限に抑えながら、コメディアンの人気度を最大化する必要があります。また、できるだけ多くのコメディアンを雇う必要があります。
多次元ナップサック問題
このバリエーションでは、ナップザックのアイテムの重量はD次元ベクトルで与えられ、ナップザックはD次元の容量ベクトルを持ちます。目標は、各次元の重量の合計がを超えないように、ナップザック内のアイテムの値の合計を最大化することです。
多次元ナップサックはナップサックよりも計算が難しく、 の場合でも、 P ≠ NPでない限り、問題にはEPTASがありません。 [33]しかし、 [34]のアルゴリズムは、スパースなインスタンスを効率的に解くことが示されている。多次元ナップサックのインスタンスがスパースであるのは、すべてのナップサックアイテム に対しての集合があり、かつである場合です。このようなインスタンスは、たとえば、リレーノードを含む無線ネットワークでパケットをスケジュールするときに発生します。[34] [34]のアルゴリズムは、複数選択バリアントである複数選択多次元ナップサックのスパースなインスタンスも解きます。
IHS(Increasing Height Shelf)アルゴリズムは、2Dナップサック(2次元の単位サイズの正方形に正方形を詰める)に最適です。最適な詰め込みでは、正方形が最大5つある場合です。[35]
複数のナップサック問題
このバリエーションはビンパッキング問題に似ています。ビンパッキング問題と異なる点は、アイテムのサブセットを選択できる点です。一方、ビンパッキング問題では、すべてのアイテムを特定のビンに詰める必要があります。この概念は、複数のナップザックがあるというものです。これは些細な変更のように見えるかもしれませんが、最初のナップザックの容量を増やすことと同じではありません。このバリエーションは、オペレーションズリサーチの多くの積載およびスケジューリング問題で使用されており、多項式時間近似スキームを備えています。[36]
二次ナップサック問題
二次ナップサック問題は、2値および線形容量制約の下で二次目的関数を最大化する問題である。[37]この問題は1980年にギャロ、ハマー、シメオネによって導入されたが、[38]この問題の最初の扱いは1975年のウィッツガルにまで遡る。[39]
部分集合和問題
部分集合和問題は、決定問題と0-1問題の特殊なケースであり、各項目の重みは値に等しい。暗号学の分野では、ナップサック問題という用語は、特に部分集合和問題を指すためによく使用される。部分集合和問題は、カープの21のNP完全問題のうちの1つである。[40]
部分集合和問題の一般化は多重部分集合和問題と呼ばれ、同じ容量を持つ複数のビンが存在する。この一般化にはFPTASが存在しないことが証明されている。[41]
幾何学的ナップサック問題
幾何学的ナップサック問題では、異なる値を持つ長方形の集合と長方形のナップサックがあります。目的は、ナップサックに可能な限り最大の値を詰め込むことです。[42]
参照
- ビンパッキング問題 – 数学および計算問題
- 小銭問題 – 指定された金額を得るために、最も少ないコインを選ぶ
- 組み合わせオークション – 参加者が個々の商品や連続した数量ではなく、個別の商品の組み合わせに入札できるスマートな市場
- 組合せ最適化 – 数学的最適化のサブフィールド
- 連続ナップサック問題
- 在庫削減問題 – オペレーションズリサーチにおける数学的問題
- ナップザックオークション
- ナップザックの問題一覧
- 梱包問題 – 物体を容器に詰める最も効率的な方法を見つけようとする問題
注記
- ^ Mathews, GB (1897 年 6月 25 日)。「数の分割について」(PDF)。ロンドン数学会紀要。28 :486–490。doi : 10.1112/plms/s1-28.1.486。
- ^ ケラー、ハンス;フェルシー、ウルリッヒ。デイビッド・パイジンジャー (2004)。ナップザックの問題。ベルリン:シュプリンガー。 p. 449.ISBN 978-3-540-40286-2. 2022年5月5日閲覧。
- ^ ケラー、ハンス;フェルシー、ウルリッヒ。デイビッド・パイジンジャー (2004)。ナップザックの問題。ベルリン:シュプリンガー。 p. 461.ISBN 978-3-540-40286-2. 2022年5月5日閲覧。
- ^ ケラー、ハンス;フェルシー、ウルリッヒ。デイビッド・パイジンジャー (2004)。ナップザックの問題。ベルリン:シュプリンガー。 p. 465.ISBN 978-3-540-40286-2. 2022年5月5日閲覧。
- ^ ケラー、ハンス;フェルシー、ウルリッヒ。デイビッド・パイジンジャー (2004)。ナップザックの問題。ベルリン:シュプリンガー。 p. 472.ISBN 978-3-540-40286-2. 2022年5月5日閲覧。
- ^ Feuerman, Martin; Weiss, Harvey (1973 年 4 月) 。 「テスト作成と採点のための数理計画モデル」。経営科学。19 (8): 961–966。doi : 10.1287 /mnsc.19.8.961。JSTOR 2629127。
- ^ Skiena, SS ( 1999 年 9 月)。「アルゴリズムに興味があるのは誰で、その理由は? Stony Brook アルゴリズム リポジトリからの教訓」。ACM SIGACTニュース。30 (3): 65–74。CiteSeerX 10.1.1.41.8357。doi : 10.1145 /333623.333627。ISSN 0163-5700。S2CID 15619060 。
- ^ Pisinger, D. 2003. ハードナップサック問題はどこにあるのか? 技術レポート 2003/08、コペンハーゲン大学コンピュータサイエンス学部、コペンハーゲン、デンマーク。
- ^ Caccetta, L.; Kulanoot, A. (2001). 「ハードナップサック問題の計算的側面」.非線形解析. 47 (8): 5547–5558. doi :10.1016/s0362-546x(01)00658-7.
- ^ J. Jooken、P. Leyman、P. De Causmaecker、「0-1ナップサック問題に対する新しいクラスの困難な問題インスタンス」、European Journal of Operational Research、301 (3):841-854、2022年。
- ^ abc Poirriez, Vincent; Yanev, Nicola; Andonov, Rumen (2009). 「無制限ナップサック問題のためのハイブリッドアルゴリズム」.離散最適化. 6 (1): 110–124. doi : 10.1016/j.disopt.2008.09.004 . ISSN 1572-5286. S2CID 8820628.
- ^ J. Jooken、P. Leyman、P. De Causmaecker、「包含的最大解に基づく0-1ナップサック問題の特徴」、European Journal of Operational Research、311 (1):36-55、2023年。
- ^ Wojtczak, Dominik (2018). 「有理数問題の強いNP完全性について」.コンピュータサイエンス - 理論と応用. コンピュータサイエンスの講義ノート. 第10846巻. pp. 308–320. arXiv : 1802.09465 . doi :10.1007/978-3-319-90530-3_26. ISBN 978-3-319-90529-7. S2CID 3637366。
- ^ Dobkin, David; Lipton, Richard J. (1978). 「ナップサック問題に対する線形探索プログラムにおける ½n2 の下限」. Journal of Computer and System Sciences . 16 (3): 413–417. doi :10.1016/0022-0000(78)90026-0.
- ^ 実際、下限はナップサックの特殊なケースである部分集合和問題に適用されます。
- ^ Michael Steele, J; Yao, Andrew C (1982年3月1日). 「代数的決定木の下限値」. Journal of Algorithms . 3 (1): 1–8. doi :10.1016/0196-6774(82)90002-5. ISSN 0196-6774.
- ^ Ben-Amram, Amir M.; Galil, Zvi (2001)、「代数ランダムアクセスマシンの位相的下限」、SIAM Journal on Computing、31 (3): 722–761、doi :10.1137/S0097539797329397。
- ^ auf der Heide, Meyer (1984)、「 n次元ナップサック問題に対する多項式線形探索アルゴリズム」、 Journal of the ACM、31 (3): 668–676、doi :10.1145/828.322450
- ^ ab Andonov, Rumen; Poirriez, Vincent; Rajopadhye, Sanjay (2000). 「無制限ナップサック問題:動的計画法の再考」. European Journal of Operational Research . 123 (2): 168–181. CiteSeerX 10.1.1.41.2135 . doi :10.1016/S0377-2217(99)00265-9.
- ^ S. Martello、P. Toth、「ナップサック問題:アルゴリズムとコンピュータ実装」、John Wiley and Sons、1990年
- ^ S. Martello、D. Pisinger、P. Toth、「0-1ナップサック問題に対する動的計画法と強い境界」、Manag. Sci.、45:414–424、1999年。
- ^ Plateau, G.; Elkihel, M. (1985). 「0-1 ナップサック問題のためのハイブリッドアルゴリズム」. Methods of Oper. Res . 49 : 277–293.
- ^ Martello, S.; Toth, P. (1984). 「部分集合和問題に対する動的計画法と分岐限定法の混合」. Manag. Sci . 30 (6): 765–771. doi :10.1287/mnsc.30.6.765.
- ^ Horowitz, Ellis; Sahni, Sartaj (1974)、「パーティションの計算とナップサック問題への応用」、Journal of the Association for Computing Machinery、21 (2): 277–292、doi :10.1145/321812.321823、hdl : 1813/ 5989 、MR 0354006、S2CID 16866858
- ^ Nederlof, Jesper; Węgrzycki, Karol (2021年4月12日). 「直交ベクトルによるSchroeppelとShamirのサブセット和アルゴリズムの改良」. arXiv : 2010.08576 [cs.DS].
- ^ Schroeppel, Richard; Shamir, Adi (1981 年 8 月). 「特定の NP 完全問題に対する A $T = O(2^{n/2} )$, $S = O(2^{n/4} )$ アルゴリズム」. SIAM Journal on Computing . 10 (3): 456–464. doi :10.1137/0210033. ISSN 0097-5397.
- ^ ab Vazirani, Vijay. 近似アルゴリズム. Springer-Verlag Berlin Heidelberg, 2003.
- ^ Dantzig, George B. (1957). 「離散変数極値問題」.オペレーションズ・リサーチ. 5 (2): 266–288. doi :10.1287/opre.5.2.266.
- ^ Calvin, James M.; Leung, Joseph Y. -T. (2003 年 5 月 1 日). 「0/1 ナップサック問題に対する貪欲アルゴリズムの平均ケース分析」.オペレーションズ・リサーチ・レター. 31 (3): 202–210. doi :10.1016/S0167-6377(02)00222-5.
- ^ Lucas, Andrew (2014). 「多くのNP問題のイジング定式化」. Frontiers in Physics . 2 :5. arXiv : 1302.5843 . Bibcode :2014FrP.....2....5L. doi : 10.3389/fphy.2014.00005 . ISSN 2296-424X.
- ^ Chang, TJ, et al. カーディナリティ制約ポートフォリオ最適化のヒューリスティックス。技術レポート、ロンドン SW7 2AZ、イギリス:インペリアル カレッジ マネジメント スクール、1998 年 5 月
- ^ Chang, CS, et al. 「DC鉄道システムにおける牽引変電所の遺伝的アルゴリズムに基づく二基準最適化」 Fogel [102]、11-16ページ。
- ^ Kulik, A.; Shachnai, H. (2010). 「2次元ナップサックにはEPTASはない」(PDF) . Inf. Process. Lett . 110 (16): 707–712. CiteSeerX 10.1.1.161.5838 . doi :10.1016/j.ipl.2010.05.031.
- ^ abc Cohen, R. および Grebla, G. 2014. 「リレーノードを備えたワイヤレスネットワークにおける多次元 OFDMA スケジューリング」。Proc . IEEE INFOCOM'14、2427–2435。
- ^ Yan Lan、György Dósa、Xin Han、Chenyang Zhou、Attila Benkő [1]: 2D ナップザック: パッキング スクエア、Theoretical Computer Science Vol. 508、35–40ページ。
- ^ Chandra ChekuriおよびSanjeev Khanna (2005)。「多重ナップサック問題に対するPTAS」。SIAM Journal on Computing。35 ( 3): 713–728。CiteSeerX 10.1.1.226.3387。doi :10.1137/s0097539700382820。
- ^ Wu, ZY; Yang, YJ; Bai, FS; Mammadov, M. (2011). 「二次ナップサック問題に対するグローバル最適条件と最適化手法」J Optim Theory Appl . 151 (2): 241–259. doi :10.1007/s10957-011-9885-4. S2CID 31208118.
- ^ Gallo, G.; Hammer, PL; Simeone, B. (1980). 「二次ナップサック問題」.組み合わせ最適化. 数理計画研究. 第 12 巻. pp. 132–149. doi :10.1007/BFb0120892. ISBN 978-3-642-00801-6。
- ^ Witzgall, C. (1975). 「電子メッセージシステム (EMS) のサイト選択の数学的方法」NASA Sti/Recon 技術レポート N. 76. NBS内部レポート: 18321. Bibcode :1975STIN...7618321W.
- ^ Richard M. Karp (1972)。「組み合わせ問題における縮約可能性」。RE Miller および JW Thatcher (編)。『コンピュータ計算の複雑性』。ニューヨーク: Plenum。pp. 85–103
- ^ Caprara, Alberto; Kellerer, Hans; Pferschy, Ulrich (2000). 「多重サブセット和問題」SIAM J. Optim . 11 (2): 308–319. CiteSeerX 10.1.1.21.9826 . doi :10.1137/S1052623498348481.
- ^ Galvez, Waldo; Grandoni, Fabrizio; Ingala, Salvatore; Heydrich, Sandy; Khan, Arindam; Wiese, Andreas (2021). 「L-パッキングによる幾何学的ナップザックの近似」. ACM Trans. Algorithms . 17 (4): 33:1–33:67. arXiv : 1711.07710 . doi :10.1145/3473713.
参考文献
- ゲイリー、マイケル R.、デイビッド S. ジョンソン(1979)。コンピュータと扱いにくさ: NP 完全性理論のガイド。WH フリーマン。ISBN 978-0-7167-1045-5。A6: MP9、247ページ。
- ケラー、ハンス。フェルシー、ウルリッヒ。デイビッド・パイジンジャー (2004)。ナップザックの問題。スプリンガー。土井:10.1007/978-3-540-24777-7。ISBN 978-3-540-40286-2. MR 2161720. S2CID 28836720.
- Martello, Silvano; Toth, Paolo (1990)。ナップサック問題: アルゴリズムとコンピュータ実装。Wiley- Interscience。ISBN 978-0-471-92420-3. MR 1086874。
外部リンク
- 難しい 0-1 ナップサック問題のインスタンスを含む GitHub リポジトリ
- 0-1 ナップサック問題インスタンスを困難にする要因を特定するための機能を含む GitHub リポジトリ
- ナップザック問題に関する講義スライド
- PYAsUKP: ハイブリッド アルゴリズムの優位関係を利用したコード、ベンチマーク、およびダウンロード可能ないくつかの論文のコピーを備えた、無制限ナップサック問題のもう 1 つのソルバーです。
- David Pisinger のホームページ。出版物リストにあるいくつかの論文のダウンロード可能なコピーがあります (「ハードナップサック問題はどこにあるのか?」を含む)
- Rosetta Codeの多くの言語でのナップサック問題の解答
- 0/1 ナップサック問題に対する動的計画法アルゴリズム
- ナップサック問題解決ツール(オンライン)
- Ruby で遺伝的アルゴリズムを使用して 0-1-KNAPSACK を解く 2011 年 5 月 23 日、Wayback Machineにアーカイブ
- 二次ナップサック問題のコード 2015年2月14日アーカイブWayback Machine
- 3次元ビンパッキングの最適化
- Python でのナップザック整数計画法のソリューションGekko (最適化ソフトウェア)
