セットの包含をチェックする最速の方法は何ですか?


24

与えられたnサブセットS1,,Sn{1,,d}

セットがあるかどうかを確認してくださいと。(もしそうなら、例を見つけ、そうでなければ、単に「いいえ」と言ってください)Si,SjSiSj

この問題の簡単な解決策は、セットのすべてのペアを調べ、時間ペアの包含をチェックするため、全体的なランタイムはです。この問題はより速く解決できますか?文献にそれの名前はありますか?O(d)O(n2d)

回答:


27

強い指数時間仮説が偽でない限り、定数時間でそれを解くことはできません。O(n2ϵ)ϵ>0

つまり、このようなアルゴリズムがあれば、時間で変数CNF充足可能性を解くことができ。その理由は、変数をそれぞれ変数の2つの等しい部分とに分割できるからです。各部分に対して、次の方法でそれぞれの節のサブセットのファミリーおよびを構築します。割り当てごとに、割り当てが満たされていない句で構成されるサブセットを追加します。この構築は、時間で実行されます。nO((2ϵ)n)ϵ>0P1P2n/2F1F2poly(n)2n/2

構築を完了するために、元のCNFインスタンスにはサブセットがあり、それがサブセットとはある場合に解があることに注意してください。F1F2

各節の要素に加えて、いくつかの余分な要素をグラウンドセットに追加すると、セットのインクルージョンの問題としてこのばらばらの問題を組み込むことはそれほど難しくありません。基本的に、のサブセットの補集合を取得します。 2つのセットがインクルードとしてカウントされないようにするには、余分な要素にアンチチェーンからコードを追加します。(グランドセットの他の余分な要素で)別の抗鎖コードのサブセット上で使用されるからサブセットの確認なし一対作るないこと包含形成します。最後に、から形成されるすべてのセットには、のアンチチェーンコードのすべての要素が含まれます。F1F1F2F2F1F2

これは、グラウンドセット上のサブセットに関するセット包含質問です。議論は基本的に、Ryan Williamsの初期の論文に戻っています(どちらを覚えていないか)。2n/2+1d=poly(n)


迅速な回答ありがとうございます。最初にスパース化補題を使用する場合、もありますか?d=O(n)
カール

9

セットファミリに興味がある場合、Yuvalの答えで概説されているものと概念的に非常に似ている別のソリューションは、ゼータ変換を計算することですn=ω2d/2

fζT=STfS

ここで、は、入力ファミリーF = { S 1S 2S n }のインジケーター関数です。すなわち、F S = 1ならばS FおよびF Sの= 0さもなければ。明らかにセットがありますS ISのJようにS ISf2[d]RF={S1,S2,,Sn}f(S)=1SFf(S)=0SiSj場合に限り、 F ζ S > 1いくつかのための S FSiSjfζ(S)>1SF

ゼータ変換は、Yatesのアルゴリズムを使用して時間で計算できます。たとえば、KnuthのTAOCP、vol。2、§4.6.4。アルゴリズム自体はかなり単純な動的プログラミングであり、含まれているセットが存在する場合の例を示すために簡単に変更できます。O(d2d)


これは私の答えよりもはるかに簡単です!
ユヴァルフィルマス

8

この問題は、高速な行列乗算のアルゴリズムを使用することで解決できます。また、計算上は行列乗算と同等であると考えられます(これを証明する方法はわかりませんが、これを証明する手法はないと思います) )。このソリューションでは、n = dの場合の実行時間はO(n ^ {2.373})になり、dとnの間の他の関係の実行時間は他になります。

行列の乗算を使用してそれを解決する方法は次のとおりです。n行d列の行列Aの行にセットの特性ベクトルを記述し、ad行n列の行列Bにセットの補数の特性ベクトルを記述します。次に、AにBを掛けます。交差するセットのペアは、ゼロに等しい積A * Bの位置です。

この問題で知られている最適な実行時間については、Huang and Panの主題に関する論文を参照してください。正しく覚えていれば、dが十分に大きくなると、実行時間は明らかに最適なO(nd)になります。n = dの場合、実行時間はO(n ^ {2.373})になります。nとdの他の関係については、他の値を取得します。長方形行列の乗算に最適なアルゴリズムが存在する場合、問題に対して実行時間O(n ^ 2 + nd)のアルゴリズムが得られます。あなたの問題を解決するこれ以上の方法はないと思いますが、私は確信していません。

これらのアルゴリズムの定数が大きすぎるため、このソリューションはおそらく実用的ではありません。Strassenのアルゴリズムは、nとdの合理的な値に対する単純なソリューションよりも改善される可能性がありますが、それについては確信がありません。ただし、行列乗算に非常に関連すると思われる問題には、ナイーブアルゴリズムよりも優れた組み合わせアルゴリズムがあることはめったにないようです(多対数的要因よりも多いため)。現在の技術を使用して、素朴なものよりも大幅に優れています。


6

n > dの場合、我々はセットがSpernerの補題によってantichainではないことを知っているし、問題の決定版は簡単になるように。しかし、nがその値に近い場合を考えると面白いかもしれません。n>(dd/2)2dπd/2n

ErdKos-Ko-Radoの定理に関するFriedgutの研究は、[ m ]のサブセットのファミリーの特性ベクトルが与えられると、fが交差するファミリー(fの 2要素ごとかどうかを時間O m 2 m交差する)。より一般的には、彼の方法は、米国を計算することができ Σ = Σ のx yはfを S X Y ここで、S X Y 0f[m]O(m2m)ff

Σ=x,yfS(x,y),
S(x,y)0が互いに素である場合にのみ非ゼロである(特定の)既知の関数です。S X Yはのみのヒストグラムに依存{ X IY II [ D ] }xはiはの指標であるI Xx,yS(x,y){(xi,yi):i[d]}xiix

(別に、我々我々は二つのファミリー与えられている場合、彼の方法はまた、動作することをコメントとして、及びに興味を持っているΣ = Σ X F Y G S X Y の両方の場合において、我々はする必要があります。計算pはのフーリエウォルシュ変換-skewed fはG任意用のp 0 1 / 2 、そしてその後Σ = Σは、xは T Xはf,gΣ=xf,ygS(x,y)pf,gp(0,1/2)Txはのみのハミング重みに依存X)。Σ=バツTバツf^バツg^バツTバツバツ

これはすべて、目下の問題にどのように関係していますか?家族考える すべてのSはI{ xは}すべてから互いに素である¯ S I{ Y }。以来、S X

F={S{バツ}[n]}{S¯{y}[n]}
S{バツ}S¯{y}が明示的に与えられている場合、これらのペアの Σへの寄与を計算できます。互いに素なペアはありますか?場合 S iは{ xは}から互いに素である ¯ Sのjは{ yが}次に、 S I¯ S J = など S ISのJ。したがって、 S 1S nは、 Σ = n i =SバツyΣS{バツ}Sj¯{y}SSj¯=SSjS1Sn
Σ==1nSS{バツ}S¯{y}

時間におけるこのアルゴリズムの実行の多項式因子無視、dは。ときnは近くにある2 D、これは有意に良好であるよりもON 2。一般に、n = ω 2 d / 2)であれば改善されます。On+2ddn2dOn2n=ω2d/2

我々は満足のペアことを知っていることを考えると存在し、どのように我々はそれを見つけるのですか?すべてのセットS 1S nをランダムに2つのグループG 1G 2に分割するとします。確率はおおよそで1 / 2、セットはS IS jが同じグループで自分自身を見つけるでしょう。運が良ければ、G 1G 2でアルゴリズムを実行できますSSjS1SnG1G21/2SSjG1G2、どれがこれらに属しているかを見つけ、検討する必要があるセットの数を半分にします。そうでない場合は、再試行できます。数の期待値であることを示し、このの決定版へのオラクル呼び出し、我々は実際に満たすペアを見つけることができますS ISのjはOログnSSj

アルゴリズムのランダム化を解除することもできます。一般性を失うことなく、と仮定します。各ステップで、kビットのそれぞれに応じて分割します。これらのパーティションの1つは、極性が反対でない限り、常に同じ部分にxyを配置します。O n d 操作のみを使用してこれを明示的にテストできます。これにより、決定バージョンへのO log 2 n オラクル呼び出しを使用した決定論的アルゴリズムが得られますn=2kkバツyOndOログ2n


面白い。これについてもっと知りたい場合、何を読むべきですか?
ジャンヌH.コルホネン

2
フリードガットの論文「交差する家族、一意性および安定性の測定について」を確認してください。
ユヴァルフィルマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.