web-dev-qa-db-ja.com

最小セットを見つけるためのアルゴリズム

セットSがあり、Mの各セットがSと少なくとも1つの要素を共有するように、最小の要素セットMを見つけたいと思います。

S = set of sets
∀ f∈S ∃e · e∈f ∧ e∈M

例えば:

S = {{1}, {1, 2, 3}, {3, 4}, {5, 6}}
M = {1, 3, 5} or {1, 3, 6} or {1, 4, 5} or {1, 4, 6}

この問題の名前はありますか? Mの近似を見つけるためにどのようなアルゴリズムが存在しますか?

3
ICR

あなたがそれについて考えるならば、この問題は、3-充足可能性別名3-SATの ブール充足可能性問題 のバリエーションに非常に似ています。

S内の各セットを、「または」ゲートで区切られた個々のブール式に変換します。次に、これらの各式は「and」ゲートで区切られます。たとえば、{{A}、{A、B、C}、{C、D}、{E、F}}はA ∧ (A ∨ B ∨ C) ∧ (C ∨ D) ∧ (E ∨ F)に変換できます。

これに対する解決策が存在するかどうかの判断は、NP完全です。あなたの特定の問題には常に解決策がありますが(最悪の場合、共通の項目がないというシナリオ)、それは3-SAT問題の洗練されたものであると私は恐れています。可能な解決策が必要なだけでなく、理想的には、選択するアイテムの数が最も少ないものが必要です。

最高のソリューションが必要な場合は、考えられるすべてのソリューションを検索してテストすることが最善の方法だと思います。ただし、おおよその解決策が受け入れられる場合は、各セットが他のセットと共通しているアイテムの数を数え、各セットで各一意の値が使用された回数を数えることで、解決策の検索を開始できます。次に、他のセットと共通する項目が最も多いセットから始めて、有効な解決策を見つけることができたら停止して、各セットで最も使用されている値を選択して、近似値を作成します。繰り返しになりますが、最適なソリューションであることが保証されているわけではありませんが、まともな概算になる可能性があります。

幸運を祈ります。

3
Neil

この問題は、文献では「最小打撃セット」として知られており、正確な解と近似解の両方のアルゴリズムがたくさんあります。私は最近、正確なソリューションのために約20のアルゴリズムをベンチマークし、村上と宇野のMMCSおよびRSアルゴリズムを見つけました。 1 非常に高速で実装が簡単です。それらの作者 C実装を利用可能にしました そして私は 並列化されたC++実装を提供しました 。詳細に興味がある場合は、arXivでまもなく利用できるようになる調査用紙も準備中です。

1 村上、宇野、「大規模ハイパーグラフを二重化するための効率的なアルゴリズム」。 Discrete Applied Mathematics 170、p。 83-94。 doi:10.1016 /j.dam.2014.01.012。 arxiv:1102.381

3