ナップザックの問題—動的プログラミングソリューションにもかかわらずNP完全ですか?


51

ナップザックの問題は、動的プログラミングで簡単に解決できます。動的プログラミングは多項式時間で実行されます。それが我々がそうする理由ですよね?

私はそれが実際にNP完全な問題であると読んだことがありますが、それは多項式問題で問題を解くことはおそらく不可能であることを意味するでしょう。

私の間違いはどこですか?


5
DPは「テーブルサイズ」の多項式であることに注意してください。ナップザックの場合、表は指数関数的に大きくなります(Kavehの答えを参照)。
ラファエル

回答:


41

ナップザック問題は、数値が2進数として与えられた場合、です。この場合、動的プログラミングは、を完了するために指数関数的に多くのステップ(入力のサイズ、つまり入力のビット数)を取ります。NP-complete

一方、入力の数値が単項で与えられた場合、動的計画法は多項式時間(入力のサイズ)で機能します。

この種の問題は、弱いNP-completeと呼ばれ。

:入力の提供に使用されるエンコーディングの重要性を理解するもう1つの良い例は、通常のアルゴリズムを検討して、数値がからまでの素数であるかどうかを確認し、それらのいずれかが分割するかどうかを確認することです これは多項式ですが、必ずしも入力サイズではありません。がバイナリで与えられる場合、入力のサイズはあり、アルゴリズムは時間内に実行されますこれは入力サイズで指数関数的です。そして、問題の通常の計算の複雑さは、入力のサイズです。2nnnnlgnO(n)=O(2lgn/2)

この種のアルゴリズム、つまり、入力の一部である最大数の多項式ですが、入力長の指数関数は疑似多項式と呼ばれます。


しかし、ナップザックに入れるオブジェクトについて考えてください。オブジェクトは入力である必要があり、そのような入力はオブジェクトの数の多項式でなければなりません。オブジェクトが十分に多い場合、入力は問題のサイズの多項式です。では、なぜナップザック問題がテーブルサイズの点でP問題であると言えないのですか?私が間違っている?
ストリン

ナップザックの大きさである場合@Strinはない、オブジェクトの数が少ない大ナップザック、例えば感じするのに十分であることができサイズのobjeact、十分です。入力のサイズは約、よりもはるかに小さいです。(0-1ナップザックについて話していると仮定しています。)mm2lgmm
カベ

入力を、バイナリエンコーディングが多項式時間でアルゴリズムを終了するサイズの小さな入力に分割し、解を結合できますか?
チャー

@Kaveh「入力のサイズは約2 lg mです」その部分の取得元がわかりません。関係m(パックサイズ)とn(アイテムのnumが)右、全く不明ですか?そして、「数字が2進数として与えられたとき」について...しかし、あなたは何かのためにそれを言うことができませんでしたか?ほとんどのアルゴリズムでは、ベース10の入力サイズについて説明します。なぜここでバイナリについて説明するのですか?また、バイナリ、8進数、10進数などでエンコードするかどうかはactual、メインアルゴリズムループを反復処理する回数はnとの両方に直接依存しWます。
The111

1
@ The111、それを新しい質問として投稿する方が良いと思います。それから回答を投稿します。あなたの質問はもっと基本的で、コメントはこの質問とあまり関係がないと思います。
カベ

33

主な混乱は、「サイズ」と「」の違いにあります。

多項式時間」は、入力のサイズに関する多項式を意味します。

疑似多項式時間」は、入力のに対する多項式を意味します。これは、入力のサイズに対して指数関数的であることと同等であることを示すことができます。


つまり、が入力のサイズを表し、が入力の値を表すとします。NsizeNval

多項式時間: ためのO(Nsizex)xN

疑似ポリ。時間: ためのO(Nvalx)xN

ここで、ナップザック問題には、多項式なく擬似多項式の解があります。これは、動的計画法の解決が値に依存する実行時間を与えるためです。つまり、で、は最大容量を表すです。O(nW)W

これで、を表すために必要な桁数で表現することで、サイズに変換できます。 は、基数を使用してを表すために必要な桁数を示します。これはで解決できます:Nsize=Logb(Nval)NvalbNval

Nval=bNsize

これを擬似多項式時間定義に接続すると、指数関数的であることがわかり。Nsize

疑似ポリ。時間: forO(bxNsize)b,xN


7
ここにアカウントを作成しました。ありがとうございます。あなたの例の後、私はついにそれを理解しました。
Inoryy

2
あなたの答えは皆を打ち負かします、ブラボー!
ムハンマドラジブ

1
我々は101に100からWを変更した場合と言うことができ、この偉大な答えに追加するには、サイズの問題が増加しない、我々はそれが2倍の大き作るWに別のビットを追加した場合、テーブルしまうので、サイズが大きくなり、行が2倍あるため、サイズを1増やすと、問題時間が2倍になり、指数関数的になります。
アーメン

@bcorso値Nが与えられたとします。そして、1からNまでの数の合計を見つけなければならなかったので、forループ法を使用しました。これは、擬似多項式時間アルゴリズムです。
DollarAkshay

8

ナップザック問題で定義されるようにカープの論文は、ナップザックに(この場合の正確なカバー、)他のNPCの問題から減少があるので、NP完全です。これは、でない限り、ナップザック問題のすべてのインスタンスを解決できる多項式アルゴリズムがないことを意味します。P=NP

しかしながら、異なる変種(例えば、0-1ナップザック他人または多項式時間溶液または良い近似があってもなくてもよいです)。しかし、これは一般的なナップザックの問題とは異なります。また、特定の(ファミリー)インスタンスで機能する効率的なアルゴリズムが存在する場合がありますが、これらのアルゴリズムは他のインスタンスでは時間がかかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.