現れない数字を繰り返し見つけることに基づく、別のアプローチがあります。セットのコールの過剰近似私たちがいることを知っている場合のを。同様に、ことがわかっている場合、はのです。明らかに、が小さいほど、この過剰近似はより有用であり、についても同じことがます。私のアプローチは、これらの過剰近似を繰り返し改良すること、つまり、これらのセットのサイズを反復的に縮小することに基づいています(より多くの値を不可能として除外するため)。A a {{a1,…,a6}AaBのB { B 1、... 、B 6 } ⊆ B A B{a1,…,a6}⊆ABb{b1,…,b6}⊆BAB
このアプローチの核心はするための方法であって、改良:過近似所与のためのさんとオーバー近似ための s 'は、新たな過近似見つけるためののように。具体的には、通常、より小さくなりますこれは私たちがために過近似絞り込むことができますので、さんを。B B A * A * ⊊ A A * AのAAaBbA∗aA∗⊊AA∗Aa
対称性によって、本質的に同じトリックは、私たちは私たちの過近似絞り込むようになるさんが:過近似与えられたに対してさんとオーバー近似のためのさん、それは新しいオーバーを生成しますの場合、近似。A a B b B ∗ bbAaBbB∗b
それでは、どのように改良を行うかを教えてください。その後、すべてをまとめてこの問題の完全なアルゴリズムを取得します。以下では、が複数の差のセットを示すものとします。つまり、です。与えられ、洗練された過剰近似を見つけることに焦点を当てます。D = { I - BのJ:1 ≤ I 、J ≤ 6 } A * A 、BDD={ai−bj:1≤i,j≤6}A∗A,B
洗練を計算する方法。 単一の差考えます。セット考えます。はの過剰近似であるという知識に基づいて、少なくとも1つの要素が要素でなければならないことがます。したがって、各要素を、含まれる可能性のある数値の「提案」として扱うことができます。それでは、すべての差をスイープし、それぞれについて、どの数字がによって「推奨」されるかを特定しましょう。、D + B = { D + Y :Y ∈ B } Bd∈Dd+B={d+y:y∈B}BD + B { 1、... 、6 } D + B A D ∈ D Dbd+B{a1,…,a6}d+BAd∈Dd
ここで、このプロセス中に少なくとも1回、数字が提案されることを確認します。どうして?差はにあり、それを処理するとき、は示唆する数値の1つになります(、は必ずが含まれることが保証されているため)。同様に、差はどこかに現れ、が再び提案されます。このようにして、の正しい値が少なくとも6回提案されることがわかります。同じことが、およびも当てはまります1 - B 1 D 1件のB 1 ∈ B (1 - B 1)+a1a1−b1Da1b1∈B1 1 - 、B 2 D 1 1 2 3(a1−b1)+Ba1a1−b2Da1a1a2a3、 等々。
したがって、を少なくとも6回提案された数値セットとします。上記のコメントによると、これは必ずの過大評価になります。a ∗ aA∗a∗a
最適化として、に存在しないすべての提案をすぐに除外できます。つまり、差をすべての値を提案するものとして扱うことができます。これにより、が確保されます。が厳密によりも小さいことを期待しています。保証はありませんが、すべてがうまくいけば、おそらくうまくいくでしょう。D (D + B )∩ A A * ⊆ A A * AAd(d+B)∩AA∗⊆AA∗A
これをまとめると、を改良してを生成アルゴリズムは次のとおりです。A ∗A,BA∗
ましょう。これは複数の提案です。S=∪d∈D(d+B)∩A
各値が表示される回数をカウントします。してみましょう中に少なくとも6回表示される値の集合。(これは、アレイ構築することによって効率的に実現することができるゼロ最初全て、最初に251を、その数毎時間提案されているが、あなたが増分、終了時に、あなたはを通じて掃引値が6以上である要素を探し大きい)A ∗ S a s a [ s ] aSA∗Sasa[s]a
Aを改良してを取得する同様のメソッドを構築できます。基本的に上記のことを逆にして、いくつかの兆候を反転させます。たとえば、代わりにを見ます。B ∗ d + B − d + AA,BB∗d+B−d+A
初期の過剰近似の計算方法。最初の過剰近似を取得するための1つのアイデアは、と仮定(wlog)することです。その結果、各値はどこかに現れる必要があるため、差のリストはの初期の過剰近似として使用できます。残念ながら、これはの非常に有用な過剰近似を与えません。a i D D a bb1=0aiDDab
より良い方法は、のいずれかの値をさらに推測することです。つまり、(wlog)と仮定し、の初期の過剰近似としてを使用します。次に、これらの36個の値のどれが実際にの1つであるかを推測します(。これにより、の近似られます。この初期過近似を使用してから、収束するまで繰り返し改良し、結果が正しいかどうかをテストします。動作するものが見つかるまで、で36の異なる推定値(平均6つの推定値で十分です)で最大36回繰り返します。b 1 = 0 A = D aab1=0A=Daa 1 B = a 1 − D b A 、B a 1aa1B=a1−DbA,Ba1
完全なアルゴリズム。 これでを計算する完全なアルゴリズムを使用できます。基本的に、と初期の過剰近似を導き出し、その後繰り返し改良します。 A Ba1,…,a6,b1,…,b6AB
推測する:各について、と推測します。以下をせよ:A 1 = Zz∈Da1=z
初期の過剰近似:および定義します。B = z − DA=DB=z−D
反復的な改良:収束するまで以下を繰り返し適用します。
- を調整して、の新しい近似を取得します。B ∗ bA,BB∗b
- 絞り込み新しい過近似取得するのさんを。A ∗ aA,B∗A∗a
- レッツおよび。 B := B ∗A:=A∗B:=B∗
成功の確認:結果セットサイズがそれぞれ6である場合、それらが問題の有効な解決策であるかどうかをテストします。もしそうなら、停止します。そうでない場合は、候補値に対するループを続行します。zA,Bz
分析。
これは機能しますか?最終的におよびにしますか、または問題を完全に解決せずにスタックしますか?見つけるための最良の方法は、おそらくそれをテストすることです。ただし、パラメータについては、はい、効果があると思います。B = { b 1、… 、b 6 }A={a1,…,a6}B={b1,…,b6}
メソッド#1を使用する場合、大きすぎず、発見的に、セットのサイズが単調に縮小すると予想します。からを導出することを検討してください。各差は示唆します 値; それらの1つは修正され、もう1つは(発見的)乱数として扱うことができます。場合は間に表示されていない数であるさんは、確率は、それがフィルタリングを生き残り、に追加されていることを何である?さて、についてが提案されることを期待ています。A ∗ A 、B d | B | | B | − 1 x a A ∗ a (| B | − 1 )× 36 / 251 | B | ≤ 36 、X 、P = 0.4 | B | | B | = 30 P ≈ 0.25 A * P|A|,|B|A∗A,Bd|B||B|−1xaA∗a(|B|−1)×36/251合計で(平均で、その平方根についての標準偏差で)回。場合、間違ったがフィルタリングに耐える確率は約程度である必要があります(2項式の正規近似と連続性補正を使用)。(が小さい場合、確率は小さくなります。たとえば、場合、を期待します。)サイズは約になると思います。、より厳密に小さいため、過近似を厳密に改善します。たとえば、場合、これらのヒューリスティックに基づいて期待しています|B|≤36xp=0.4|B||B|=30p≈0.25A∗| A | | A | = | B | = 36 | A ∗ | ≈ 18 | A |p(|A|−6)+6|A||A|=|B|=36|A∗|≈18、これはよりも大幅に改善されています 。|A|
したがって、実行時間が非常に高速になると予測しています。通常、収束には3〜5回の洗練の反復で十分であり、約6回の推測で十分であると予想されます。各改良操作には、おそらく数千のメモリ読み取り/書き込みが含まれ、おそらく20〜30回行います。そのため、指定したパラメーターに対して、これは非常に高速になると予想されます。ただし、確実に確認する唯一の方法は、試してみて、うまく機能するかどうかを確認することです。z