いくつかの条件に従って、セットを所定数の互いに素なサブセットに分割する方法は?


11

セットA{1,,k}、整数sk、および負でない整数a_ {ij}が与えられaijます。私の問題を見つけることであるs互いに素なサブセットSj{1,,k}ように:

  1. j=1sSj=A ; そして
  2. |Sj|aij(すべてのiSjおよびj=1,,s

この問題を解決するには?実行可能な解決策を見つけるのは難しいですか?

いくつかのj \ in \ {1、\ ldots、n \}で始まり、番号までi \ in \ {1、\ ldots、k \}j{1,,n}を割り当てる手順を試したので、問題を解決するのは簡単ではないと思いますIに割り当てJより大きいA_ {IJ}一部のI割り当てます。しかし、これは不正解です。どのjにも割り当てられないiが残る可能性があるためです(それらのa_ {ij}が満たされなかったため)。i{1,,k}ijaijiijaij

ブルートフォースメソッドは、Aのすべてのサブセットを生成してAそれぞれをテストする必要がある場合、私にとっては機能しますが(k=8,n=3)、非常に非効率的です。


編集が質問したい質問に対応しているかどうかを確認します。また、どこから来たのですか?それは固定定数(入力の一部ではなく、常に固定)ですか、それとも入力の一部ですか?最後に、実用的なソリューションを探していますか?または、この問題の理論的な複雑さを探していますか?前者の場合、整数線形計画法を使用してみましたか?amax
DW

回答:


10

この問題は、Vertex Coverからの削減によりNP困難です。

頂点被覆問題において、我々は、グラフ与えられると数、そして我々のタスクは、いくつかのサブセットがあるかどうかを決定することであるせいぜいのから頂点内のすべてのエッジように、入射します少なくとも1つの頂点。(同等に:最大個の頂点を削除することで、すべてのエッジを殺すことは可能ですか?)G=(V,E)rUrVEUGr

まず、を互いに素なサブセットに分割することは、各要素を可能なラベルの1つに割り当てることと同じです。削減の基本的な考え方は、各頂点にラベルを作成し、次の意味で、各エッジにその端点に対応する2つのラベルの1つだけを「許可」することです。ラベルは、同じラベルを割り当てることができる他のエッジに(本物の)制約を導入しませんが、対応しないラベルにエッジを割り当てると、他のエッジに同じラベルが割り当てられるのを防ぎます-もちろん、これは数値を押し上げる効果があります必要な個別のラベルの。AsAsSjvjV

頂点カバーのインスタンスから問題インスタンスを作成するには:(A,a,s)(G,r)

  1. を設定します 、及び要素の作成中の各エッジのためにおける。(これらのペアは整数ことができます。それらの間の全単射はそうです。)k|E|(i,j)AvivjE1,,k
  2. セットにもしまたは。それ以外の場合は、を1に設定します。a(b,c),d|E|d=bd=ca(b,c),d
  3. 設定します。s=r

場合は頂点カバーのYES-インスタンスで、それはあなたの問題のちょうど-構築インスタンスもYES-インスタンスであることを確認するのは簡単です:ちょうどラベル選ぶ頂点に対応する任意の溶液中の、および各エッジは、対応する要素を、ラベルまたはいずれかが選択さ方に割り当てます(両方のラベルが選択された場合は任意に選択します)。このソリューションはサブセットを使用し、有効なは対応するものだけなので有効です(G,r)SjvjUvbvcE(b,c)ASbScsaij以上を防止する(非)効果があるラベル 同じラベルが割り当てられているエッジ。|E|

問題のYESインスタンスは、元のが頂点カバーのYESインスタンスであることを意味します。有効な解からは一般にエッジしないラベル割り当てる可能性があるため、これは少し複雑です。つまり、、つまり必ず、有効な解から有効な頂点カバーを「読み取り」ます。X=(A,a,s)(G,r)YX(i,j)Smm{i,j}UY

ただし、対応しないラベルを割り当てるとコストが高くなり、ソリューションの構造が大幅に制限されます。エッジにこのようなラベルが割り当てられると、で、事実その、それがなければならないことを保証するだけこのラベルを割り当てエッジ。だから、任意の溶液中の、このような非相応に標識エッジ含む、我々は代替ソリューションを構築することができ次のように:(i,j)Smm{i,j}a(i,j),m=1Y(i,j)SmY

  1. の新しいラベルをまたはいずれかに任意に選択します。Sz(i,j)SiSj
  2. この新しいラベルに割り当てます。これが無効なソリューションをもたらす場合、それは正確に他の1つのエッジ、にラベルが割り当てられているためである必要があります。その場合は、を設定して、手順1に進みます。(i,j)(i,j)z{i,j}Sz(i,j)=(i,j)

上記のアルゴリズムは、次の2つの方法のいずれかで終了する必要があります。矛盾のない新しいラベルが見つかるか、頂点の完全なサイクルが見つかるかのいずれかです。前者の場合、セット有効な新しいソリューションが見つかりますが、後者の場合、セットの有効な新しいソリューションが見つかります。どちらの方法でも、対応するラベルに割り当てられた少なくとももう1つのエッジを持つ有効な新しいソリューションを構築しました。このプロセス全体を最大で繰り返した後時々、元の頂点カバー問題の解を読み取ることできる有効な解を作成します。Szs1s|E|Y

この構成は明らかに多項式時間であるため、問題はNP困難であることがわかります。


ご協力ありがとうございました。この問題を(おおよそ)どのように解決できるか考えていますか?(たとえば、頂点カバー問題の手法を使用してそれを解決できますか?)貪欲なアプローチを試しましたが、実行可能なソリューションを出力できない場合があります。(私がを選択した方法では、解決策が存在する可能性がある場所で貪欲なアプローチが失敗します。)Sj
drzbir

まあ、貪欲なアプローチは実行可能な解決策を出力できない場合があることが予想されます。常にそうである場合、ポリタイムでNP困難な問題を解決することになるからです;-) それができない場合でも、必ずしも間違っているわけではないことに注意してください。解決策を見つける:実行可能な解決策が存在しない可能性があります。
j_random_hacker

解法については、ビームサーチといいます。これは基本的に、メモリ使用量を制限するために十分に悪い部分的なソリューションを「忘れる」一種のブランチアンドバウンドです。(B&Bはそれ自体が非常に優れたアプローチであり、問​​題をすばやく解決することもあり、ビーム検索よりも少し単純なので一見に値しますが、正確な方法であるため、場合によっては数千年かかることもあります。)
j_random_hacker

(以下のすべては、ビーム検索とB&Bにも適用されます。)B&Bは非常に一般的な手法です。これの重要な点は、問題の詳細を利用して決定を整理し、可能な限り悪い決定(つまり、実行可能な解決策につながらない決定)が検索ツリーの早い段階で行われるようにすることです。(これらの決定はどこかで行われ、それらが行われる各レベルが深くなると、それらが行われる回数が2 になります。)あなたの問題については、最初にの要素を「悪さ」の降順でランク付けすることをお勧めします。 ..A
j_random_hacker

...要素の悪さは、たとえば、すべてのに対する最小値、2番目の最小値、3番目の最小値などの関係の破壊などである可能性があります。大まかに言えば、「最悪の」要素が要素になります。追加されるセットを最も厳しく制約します。検索ツリーの深さ各ノードでは、最初の(したがって「最悪の」)要素がすでにセットに割り当てられている部分的な解があります。番目の要素を割り当てるセットのいずれかを選択する必要があります。つまり、最大再帰呼び出しが必要になります。(「まで」は、うまくいけば、...iaijjddn(d+1)n
j_random_hacker 16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.