セットのセットが与えられると、各セットから少なくとも1つの要素を含む最小のセットを見つけます。


15

集合を考えるとセットの、私はセットを見つけるしたいMは、すべてセットするようなSにおけるSは、少なくとも一つの要素が含まMを。また、この基準を満たしながら、Mにできるだけ少ない要素を含めるようにしますが、このプロパティには複数の最小のMが存在する場合があります(ソリューションは必ずしも一意ではありません)。SMSSMMM

具体例として、セットが国旗のセットであり、Sの各フラグSの要素がその国旗で使用される色であると仮定します。米国はS = { r e d w h i t e b l u e }であり、モロッコはS = { r e d g r e e n }です。その後、MSSSS={red,white,blue}S={red,green}Mは、すべての国旗がの色の少なくとも1つを使用するプロパティを持つ色のセットです。(青、黒、赤、緑、黄、白のオリンピック色は、このようなMの例であり、少なくとも1920年にはそうでした。)MM

この問題の一般的な名前はありますか?セットを見つけるために受け入れられた「最良の」アルゴリズムはありますか?(計算の複雑さのためにプロセスを最適化するよりも、ソリューション自体に興味があります。)M


2
セットカバーの問題をお探しですか?
たJuho

@Juhoまったく違います。私の例では、集合被覆問題は、それらのフラグの労働組合が含まれていることを、このようなフラグのセットを見つけることであろうすべてのすべてのフラグに使用される色のを。対照的に、私はフラグのリストではなく色のリストだけを吐き出すものを探しています。そして、すべての可能な色を含むためにセットを必要としません。しかし、ウィキペディアでこの領域を調べますが、あなたは私を正しい道に導いたと思います。ありがとう!M
bdesham

回答:


13

問題は、よく知られているNP完全問題Hitting Setです。Set-Coverと密接に関連しています。NP完全性の証明は、Garey and Johnsonの古典的な本にあります。

近似したい場合は、まずインスタンスをSet-Coverに変換してから、Set-Coverの近似アルゴリズムを適用します。ただし、LundおよびYannakakisが示すようにP = NPでない限り、Set-Coverは多項式時間の定数係数で近似できません。

正確なソリューションに興味があり、入力が適切に動作する場合は、固定パラメータの扱いやすいを使用することをお勧めします。ここでは、実行時間は入力長nだけでなく、追加のパラメーターkでも表されます。走行時間である場合はO(f(k)nO(1))、我々は、FPT-アルゴリズムアルゴリズムを呼び出します。ここで、f(k)は増加関数です。したがって、kが一定の場合、ポリタイムアルゴリズムがあります。第一章のFlumとグローエの本では、セットを打つためのFPTアルゴリズムについて説明しています(より正確には、pカードを打つセットについて)。このアルゴリズムは実装が簡単で、有界検索ツリーの方法を使用します。それでも、ここで説明するには多くのスペースが必要です。基本的に、必要な(?)総当たり攻撃を小さな断片に分割します(kが小さい場合)。


ありがとう。実際の実装について読むための参照をどこかに提供できますか?すなわち、どのように私の問題をセットカバーの問題に変換し、それからどのように解決しますか
-bdesham

1
bdesham、各要素をそれが属するセットのセットと考えてください。elements-as-sets入力でset coverを実行します。また、ここにリンクされているwikiページを読んでください。
サショニコロフ

おおよその解決策に興味がありますか、それとも正確な解決策が必要ですか?
A.シュルツ

正確な解決策が欲しいです。私が使用しているデータセットは十分に小さいので、それが問題になるとは思わない。
bdesham

1
@Keyser:そのとおりです。ただし、決定問題は対応する最適化問題と関連付けるのが一般的な方法です。これらの問題は、NP完全問題と密接に関連しているためです。
-A.シュルツ

2

役立つアイデア:すべてのセットの交差点が空でない場合、交差点の任意の要素sを選択してM = { s }を設定できます。交差が空の場合、setsでの出現が最大である要素(色)cを見つけ、それが出現するすべてのセットをsingleton { c }で置き換えます。すべての要素の出現回数が等しくなるまで、これをやっておいてください1、その後、セットMを残りのセットの結合に。たとえば、Sが何らかのセットAのパワーセットである場合、M = ASsM={s}c{c}1MSAM=A。しかし、私は間違っているかもしれません。


2

レイライターの「第一原理からの診断の理論」をご覧くださいここでは、ヒットセットを計算するためのアルゴリズムと、この追加ノート「修正」を提供しています。

このアルゴリズムは一般に「ヒットセットツリー」アルゴリズムとして知られていますが、実装を見つけるのはそれほど難しくないはずです。あなたはランタイムにあまり興味がなかったと言いましたが、早期ブランチ終了などの最適化は実装にとって非常に重要であり、同様に興味深いです:)


2
あなたの答えをより自己完結させるためにアルゴリズムを要約できますか?リンクは壊れる可能性があります。
たJuho

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