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


9

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

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

それはである?まだ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 - 1と⌊ K ⌋番号、最後に合計最大⌊ K ⌋ビット+ 2 Knkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋。2k+m−1

その数に加えて、問題にを追加します。解には、この数、または以前に作成された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 01。1000 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ビット数にそれを分割する方法は不明です。もし番号があると、NとK = 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 3。10 ∗ 2 0 + 3 ∗ 2 1をとることができますが、これは合計で2 4になります。kceil(log⁡k)24232310∗20+3∗2124
— トムファンデルザンデン2013年

0

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

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

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

enter image description here

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