サブセットの合計:特殊なケースから一般的なケースに削減


20

ウィキペディアでは、サブセットの合計問題を、合計がゼロの整数の特定のマルチセットのサブセットを見つけることとして説明しています。さらにそれは和とサブセット発見と同等であると述べている任意の所与のため。ss

したがって、それらは同等であるため、どちらの側にも削減が必要だと思います。から0 まで値は、設定することで簡単になります。しかし、私はゼロから削減見つけ運がなかったすなわち整数の集合与えられ、、整数の集合構築の和とのサブセット含む(いずれについてもとのサブセットとして存在している場合にのみ場合、)と合計ゼロ。ss=0sABssA

いくつかのポインタを教えてもらえますか?

回答:


11

実際には、特別から一般への削減がすでにあります。設定することにより、基本的に一般的なアルゴリズムを使用して特別な問題を解決します。s=0

逆の場合(つまり、一般的なものから特別なものへの削減):

もしセット与えられると仮定と数し、いくつかのサブセットがあるかどうかを決定する必要がに合計。K S KS={x1,,xn}KSK

ここで、一部のサブセットの合計がかどうかを判断できる場合のアルゴリズムを考えて、この問題を解決し。0

場合、簡単な削減ができます。S = { x 1x 2x nK }xi>0S={x1,x2,,xn,K}

S和のサブセット有するときに限り和のサブセット有する。S K0SK

この問題は、一部のに対してを使用できる場合に発生します。Ixi0i

(なぜ?)と仮定できます。K>0

正の合計がで、負のがます。 P x i NxiPxiN

次に、新しいセットを作成します。S={y1,y2,yn}

M = P + | N | + Kyi=xi+Mここで、。M=P+|N|+K

各。yi>0

次に、セットでゼロサブセット和アルゴリズムを実行します

S{(K+M)}

S{(K+2M)}

S{(K+3M)}

S{(K+nM)}

に和サブセットがある場合、上記のセットの少なくとも1つに和ゼロのサブセットがあることを示すのは簡単です。KSK

私はあなたに他の方向の証明を任せます。


どうもありがとうございました。0-subset-sumのインスタンスをK-subset-sumの1つの(代わりに)インスタンスに変換する縮小はありますか?n
ipsec

@ipsec:K-subset-sumのインスタンスを0-subset-sumに変換するということですか?おそらく、上記のセットの和集合を使用するとうまくいきます。n
アルヤバタ

まあ、私は実際に私が今正しい方向を得たかどうかを二度考えていました。K-subset-sumがKごとにNP-hardであり、0-subset-sumがNP-hardであることを示したい場合、0-subset-sumからK-subset-sumへの削減を使用できます、0インスタンスからKインスタンスへのポリタイム変換が必要になります。しかし、これが実際に私の質問で尋ねたものであるかどうかは定かではありません。
ipsec

@ipsec:setと言うと、NP-Hardness of -subset-sumのNP-Hardnessを示しています。NP-Hardnessof zero-subset-sum:一般的な問題は、少なくとも特別な問題と同じくらい難しいです。削減に関しては、zero-subset-sumを -subset-sumに削減したと言うことに注意してください。また、は入力であることに注意してください。「every given」について話すとき、正確にはどういう意味ですか?上記の答えは、特殊なケース(ゼロサブセット和)が一般的なケース(サブセット和、は入力)と同じくらい硬い(NP硬度の意味で)ことを示しています。K K K K k k ks=0KKKKkk
アーリヤバタ

気にしないで。私が最初に疑問に思ったのは、0-subset-sumがNP-hardであることがわかっている場合、たとえば1-subset-sumも同様に導出できるかどうかです。ウィキペディアはそう言っていますが、適切な削減を探していました。しかし、私は今、私の言葉遣いが完全に台無しにされ、実際に反対を求めていたことがわかります。とにかく、与えられた整数KとLのKサブセット和インスタンスからLサブセット和インスタンスに減らすのに十分な入力を与えてくれたので、私の問題はまだ解決されています。
ipsec

0

Aryabhataの答えは、すべての数値に大きな掛けることができるという事実を利用することで修正できます。次に、それぞれに小さな「プレゼンスタグ」のように動作するものを追加し、それらなしでできる場合、ゼロに到達します。具体的には、プレゼンスタグとしてと1を使用します。cc K c = 2 n + 1 cKc=2(n+1)

ターゲット値一般的な問題のインスタンスが与えられた場合、以下を含む特定の問題のインスタンス(ターゲット値0)を作成します。(S={x1,,xn},K)K

  • Y={y1,,yn}yi=2(n+1)xi+1
  • z=2K(n+1)n
  • n1

KKKKK=0 その場合、一般的なケースを特別なケースに変換する必要はまったくありません!)

{xj1,,xjm}mKy{yj1,,yjm}2K(n+1)+m2K(n+1)nmn1mn[n+1,0]

2(n+1)

{yj1,,yjm}mY[1,n1]zz=2K(n+1)nnn1

zY2(n+1)nYn1Yn+n1=2n12(n+1)z2(n+1)Y2(n+1)2(n+1)z=2K(n+1)n

z

(2K(n+1)n)+i=1m(2(n+1)xji+1)+pull-ups=0

そして、用語を並べ替えることができます:

2K(n+1)+i=1m(2(n+1)xji)(n+i=1m1+pull-ups)=0

2K(n+1)+i=1m(2(n+1)xji)(n+m+pull-ups)=0

2(n+1)(K+i=1mxji)(n+m+pull-ups)=0

2(n+1)2(n+1)

(n+m+pull-ups)=0

これは前の方程式に直接代入して戻すことができます

2(n+1)(K+i=1mxji)=0

2(n+1)

K+i=1mxji=0

これにより、元の一般的な問題のインスタンスに対する解決策が得られます。

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