ウォームアップ:ランダムビットベクトル
ウォームアップとして、各ビットベクトルが一様にランダムに選択される場合から始めることができます。その後、問題は時間で解決できることがわかりました(より正確には、1.6はlg 3に置き換えることができます)。O(n1.6min(k,lgn))1.6lg3
問題の次の2セットのバリアントを検討します。
所与のセット非重複ペアが存在する場合にビットベクトルのは、決定S ∈ S 、T ∈ Tを。S,T⊆{0,1}ks∈S,t∈T
これを解決する基本的なテクニックは、分割統治です。以下は、分割統治を使用した時間アルゴリズムです。O(n1.6k)
最初のビット位置に基づいてとTを分割します。換言すれば、フォームは、S 0 = { S ∈ S :S 0 = 0 }、S 1 = { S ∈ S :S 0 = 1 }、T 0 = { T ∈ T :T 0 = 0 }、T 1 = { T ∈ T :TSTS0={s∈S:s0=0}S1={s∈S:s0=1}T0={t∈T:t0=0}。T1={t∈T:t0=1}
ここで、、S 0、T 1、およびT 1、S 0から重複しないペアを再帰的に探します。再帰呼び出しで重複しないペアが見つかった場合はそれを出力し、そうでない場合は「重複するペアは存在しません」と出力します。S0,T0S0,T1T1,S0
すべてのビットベクトルがランダムに選択されるため、および| T b | ≈ | T | / 2。したがって、再帰呼び出しが3つあり、問題のサイズを2分の1に削減しました(両方のセットのサイズが2分の1に削減されます)。後LG 分(| S |、| T |)分割、二組の一方は、サイズ1までであり、問題が線形時間で解くことができます。の線に沿って再帰関係を取得します|Sb|≈|S|/2|Tb|≈|T|/2lgmin(|S|,|T|)、その解は T (n )= O (n 1.6 k )です。2セットの場合の実行時間をより正確に考慮すると、実行時間は O (min (| S |、| T | )0.6 max (| S |、| TT(n)=3T(n/2)+O(nk)T(n)=O(n1.6k)。O(min(|S|,|T|)0.6max(|S|,|T|)k)
これはさらに場合に注目することによって、改善することができる、次いで非重複ペアが存在する確率が指数関数的に小さいです。特に、場合xは、yは 2つのランダムベクトルであり、それらはしているが、重なり合わない確率である(3 / 4 )K。もし| S | = | T | = n、そのようなペアがn 2個あるため、ユニオン境界により、重複しないペアが存在する確率は最大n 2(3k≥2.5lgn+100x,y(3/4)k|S|=|T|=nn2。場合 K ≥ 2.5 LG N + 100、これは ≤ 1 / 2 100。したがって、前処理工程として、場合 K ≥ 2.5 LG N + 100、我々はすぐにそうでなければ、我々は、上記のアルゴリズムを実行し、(これが不正確である確率は無視できるほど小さい)「いいえ非重複対は存在しません」を返すことができます。n2(3/4)kk≥2.5lgn+100≤1/2100k≥2.5lgn+100
したがって、(またはO (min (| S |、| T | )0.6 max (| S |、| T |)min (k 、lg n)))上記で提案した2セットのバリアントの場合)、ビットベクトルがランダムに一様に選択される特別な場合O(n1.6min(k,lgn))O(min(|S|,|T|)0.6max(|S|,|T|)min(k,lgn))
もちろん、これは最悪のケースの分析ではありません。ランダムビットベクトルは最悪の場合よりもかなり簡単ですが、一般的な場合に適用できるアイデアを得るために、ウォームアップとして扱いましょう。
ウォームアップからの教訓
上記のウォームアップからいくつかの教訓を学ぶことができます。まず、分割統治(ビット位置で分割)が役立つようです。第二に、できるだけ多くのがその位置にあるビット位置で分割したい。0が多ければ多いほど、サブ問題のサイズの減少は少なくなります。10
第三に、これはの密度が小さくなるにつれて問題が難しくなることを示唆しています- ビットベクトルに1がほとんどない場合(ほとんどが0である場合)、各分割が減少するため、問題は非常に困難に見えます副問題のサイズが少し。だから、密度定義Δをされたビットの割合であることが1(すなわち、全てのうちn個のkビット)とビット位置の密度は、iがあるビットベクトルの分数であることが1位置I。110Δ1nki1i
非常に低い密度の取り扱い
次のステップとして、密度が非常に小さい場合はどうなるか疑問に思うかもしれません。すべてのビット位置の密度がより小さい場合、1/k−−√
x,yixi=yi=1i(nΔ(i))2<n2/kk<n2
n
一般的なアルゴリズムに向けて
i1
iΔ(i)
STiS0={s∈S:si=0}S1={s∈S:si=1}T0={t∈T:ti=0}T1={t∈T:ti=1}
ここで、S 0、T 0、S 0、T 1、およびT 1、S 0から重複しないペアを再帰的に探します。S0,T0S0,T1T1,S0
課題は、最悪の場合のパフォーマンスを分析することです。
Δ(i)<1/k−−√iO(nk)
この手順の実行時間はどのくらいですか?よくわかりませんが、ここに役立ついくつかの観察結果があります。再帰の各レベルは、問題のサイズを約削減しますn/k−−√nn−n/k−−√k−−√3k√