回答:
k = 2であっても、それはまだ完全です。サブセットの合計のインスタンスが与えられた場合、数値を分割していくつかのビットを追加することにより、それをこのバリアントに変換できます。
まず、問題のすべての数値の合計は、mの値によっては未満になります。
ここで、kビットが設定されている元の問題から数値を取得します。これらの数の合計がn + 2 k + mになるように、この数を正確に2ビットが設定されたk個の数に分割します。我々は見つけることによって、再帰的にこれを行うことができ⌈ K ⌉番号をその第一の和まで⌈ K ⌉ビット+ 2 、K + M - 1と⌊ K ⌋番号、最後に合計最大⌊ K ⌋ビット+ 2 K。
その数に加えて、問題にを追加します。解には、この数、または以前に作成されたk個の数のすべてが含まれている必要があります。元のターゲット値がtであった場合、新しいターゲット値はt + 2 k + mになります。
元の問題に複数の数値があった場合は、このプロセスを繰り返して、mの新しい値にを取ります。
位置のビットのみ2つの方法があり設定することができる:答えは数含めることができます2 K + Mの又は全てのkその合計最大数をN + 2 、K + 、M。したがって、サブセット合計をサブセット合計バリアントに削減しました。
一例として、レッツテイク目標値に7。この問題は、次の2進数を使用することにより、ここで提示するサブセット合計バリアントとしてエンコードできます。
2はと0000 1にマッピングされます。(ここでは、余分なビットを使用する必要はありません。)
3にマッピングされると0000 00 01
図5ににマッピングされると0000 00 000 01。
新しい目標値はます。
元の問題がビットで表されている場合、変換された問題は最大でO (n 4)ビットです。元の問題には、最大でO (n )個の数値があり、それぞれに最大でO (n )個のビットがあるため、それらすべての合計もO(n)になります。変換された問題にはO (n 2)の数値があります(各nビットの数値はn + 1 2ビットの数値に分割され、長さが最大でO (n 2)になるため) 各数値に追加ビットを使用するためです。したがって、変換された問題の合計サイズはO (n 4)ビットです。
これは、Vorによる質問から抽出された情報です。
以下のための問題は、NP完全のまま。モノトーンX-SATからの迅速な削減が見つかりました(削減のスキーマはこちらを参照してください)。
問題は、たとえでです。詳細については、トムの回答を参照してください。これは、サブセットサムからの彼の削減の小さな表現です: