サブセット合計バリアントの複雑さ


9

このサブセット合計問題のバリアントは簡単ですか?

整数所与、正の整数の集合A = { X 1X 2x n }すべてのx iで最大でk = 2ビットが1に設定されるようにします(x i = 2 b i 1 + 2 b i 2mA={x1,x2,...,xn}xik=21)。サブセットが存在する Aは'その要素の合計が等しくなるように、Mxi=2bi1+2bi2,bi1,bi20AAm

それはである?まだN P -completeですか?PNP

そして、すべてのに最大でk = 3ビットが1に設定されているとしたら?以下のために、K = 1つの問題は自明です。xik=31k=1

回答:


8

k = 2であっても、それはまだ完全です。サブセットの合計のインスタンスが与えられた場合、数値を分割していくつかのビットを追加することにより、それをこのバリアントに変換できます。NPk=2

まず、問題のすべての数値の合計は、mの値によっては未満になります。2mm

ここで、kビットが設定されている元の問題から数値を取得します。これらの数の合計がn + 2 k + mになるように、この数を正確に2ビットが設定されたk個の数に分割します。我々は見つけることによって、再帰的にこれを行うことができK番号をその第一の和までKビット+ 2 、K + M - 1K番号、最後に合計最大Kビット+ 2 Knkkn+2k+mkk2k+m1kk2k+m1

その数に加えて、問題にを追加します。解には、この数、または以前に作成されたk個の数のすべてが含まれている必要があります。元のターゲット値がtであった場合、新しいターゲット値はt + 2 k + mになります。2k+mktt+2k+m

元の問題に複数の数値があった場合は、このプロセスを繰り返して、mの新しい値にを取ります。k+m+1m

位置のビットのみ2つの方法があり設定することができる:答えは数含めることができます2 K + Mの又は全てのkその合計最大数をN + 2 、K + 、M。したがって、サブセット合計をサブセット合計バリアントに削減しました。k+m2k+mkn+2k+m

一例として、レッツテイク目標値に7。この問題は、次の2進数を使用することにより、ここで提示するサブセット合計バリアントとしてエンコードできます。{2,3,5}7

2は0000 1にマッピングされます。(ここでは、余分なビットを使用する必要はありません。)0100 10000 1

3にマッピングされる0000 00 011000 00 1,0100 00 10000 00 01

図5ににマッピングされる0000 00 000 011000 00 000 1,0010 00 000 10000 00 000 01

新しい目標値はます。1110 10 010 01

元の問題がビットで表されている場合、変換された問題は最大でO n 4ビットです。元の問題には、最大でO n 個の数値があり、それぞれに最大でO n 個のビットがあるため、それらすべての合計もO(n)になります。変換された問題にはO n 2)の数値があります(各nビットの数値はn + 1 2ビットの数値に分割され、長さが最大でO n 2)になるため)nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)各数値に追加ビットを使用するためです。したがって、変換された問題の合計サイズはO n 4ビットです。nO(n4)


エンコーディングが作業テープの指数関数的なサイズにつながらないことを確信していますか?
はVor

いいえ、変換された問題のサイズは四次です。入力がnビットの場合、それぞれnビットが設定された最大n個の数値があります。したがって、変換された問題にはO(n ^ 2)の数値が含まれます(kビットの数値はk + 1の数値に分割されるため)。各数は(2n)ビット長で、元の問題のn個の数のそれぞれの最大合計+ nビットに対応します。したがって、各数値にはO(2n + n ^ 2)ビットが含まれ、合計でO(n ^ 4)ビットになります。
トムファンデルザンデン2013年

@TomvaderZanden:質問に対するあなたの削減の写真を追加しました。私がそれを正しく解釈したかどうかを確認してください
Vor

@TomvaderZanden:今日私はあなたの削減をもう一度見ますが、kビットが設定された任意の数から、「最高」の部分の合計が2 kになるk 2ビット数にそれを分割する方法は不明です。もし番号があると、NK = 13ビットセット。13個の2ビットの数値が必要ですが、13は1101であり、2ビットの数値で「カバー」することはできません(この例は、3と5のk = 2で機能するため機能します)。これは、k個の 2ビットの数値ごとに異なる上位ビットを使用すれば、簡単に修正できると思います。それらは合計で01111 ... 1になり、次に合計が2 kになるダミ​​ー0000 ... 1を追加します。nkk2knk=13k2k
Vor

少しあいまいですが、「帰納的」な手順を使用することは確かに可能です。実際にはビットは必要ありません。必要なのはc e i l log k )だけです。あなたは、最大13 1ビットの数値その合計を検索したい場合は2 4、あなたは合計最大という6つの番号を見つける必要がある2 3も合計して7 2 310 2 0 + 3 2 1をとることができますが、これは合計で2 4になります。kceil(logk)2423231020+32124
トムファンデルザンデン2013年

0

これは、Vorによる質問から抽出された情報です。

以下のための問題は、NP完全のまま。モノトーンX-SATからの迅速な削減が見つかりました(削減のスキーマはこちらを参照してください)。k3

問題は、たとえでです。詳細については、トムの回答を参照してください。これは、サブセットサムからの彼の削減の小さな表現です:k=2

enter image description here

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