乱数の真に均一な分布を得る唯一の方法は、拒否サンプリングですか?


21

一様分布の範囲数値を出力するランダムジェネレーターがあり、一様分布の範囲乱数を生成する必要があるとし ます。[ 0 .. N 1 ][0..R1][0..N1]

仮定と割り切れない、取得するために、真に均一な分布、我々が使用することができます 棄却サンプリング方法を:N RN<RNR

  • がような最大の整数である場合k N < RkkN<R
  • で乱数を選択し[ 0 .. R 1 ]r[0..R1]
  • 場合、出力R \ MOD Nが、そうでない場合は、他の乱数R」、R」にしようと、...を維持する条件が満たされるまでr<kNrmodN
真に均一な離散分布を得るには、拒絶サンプリングが唯一の方法ですか?

答えが「はい」の場合、なぜですか?

注意:もしN>R考え同じである:乱数発生r[0..Rm1],Rm>=N、例えばr=R(...R(Rr1+r2)...)+rmここで、ri[0..R-1]の範囲の乱数[0..R1]


回答:


13

はい、いいえ、「唯一の方法」の意味によって異なります。はい、終了が保証されている方法がないため、できる最善の方法は(と一般的な値に対して)確率1で終了するアルゴリズムです。いいえ、「無駄」を小さくすることができます好きなように。NR

一般的に保証された終了が不可能な理由

決定論的な計算エンジン(チューリングマシンまたはボートに浮かぶもの)に加えて、要素セットランダムな要素を生成する神託があるとします。あなたの目標は、要素セット要素を生成することです。エンジンの出力は、oracleによって返される値のシーケンスのみに依存します。これは、潜在的に無限のシーケンス関数です。R[0..R1]N[0,N1]f(r0,r1,r2,)

エンジンが最大で回Oracleを呼び出すとします。オラクルが回未満呼び出されるトレースがある場合があります。その場合、常に正確に回呼び出されるようにoracleを余分に呼び出しても、出力は変更されません。したがって、一般性を失うことなく、オラクルは正確に回呼び出されると仮定します。その場合、結果確率は、とようなシーケンスです。オラクルは一様なランダムジェネレーターであるため、各シーケンスは等確率であり、確率はです。したがって、各結果の確率は、形式ですmm m x r 0r m 1f r 0r m 1= x 1 / R m A / R m A 0 R mmmmx(r0,,rm1)f(r0,,rm1)=x1/RmA/Rmここで、の間の整数であり、及び。A0Rm

場合分割いくつかのために、その後、上に均一な分布を生成することができランダム発生器を呼び出すことによって素子倍(これは読者の課題として残されています)。それ以外の場合、これは不可能です。確率結果を取得する方法はありません。この条件は、のすべての素因数も因数であると言うことに等しいことに注意してください(これは、質問で書いたものよりも許容範囲が広いです;たとえば、6面のフェアで4つの中からランダムな要素を選択できます4は6を分割しませんが、死にます。R m m N m 1 / N N RNRmmNm1/NNR

無駄を減らす

戦略では、場合、すぐに再描画する必要はありません。直観的に、はエントロピーが少し残っておりこれをミックスに保持できます。[ krkN[kN..R1]

しばらくの間、実際に未満の乱数を永久に生成し続け、ドローを作成して一度に乱数を生成すると仮定します。このグループ化された世代で単純な棄却サンプリングを行う場合、描画の無駄は、つまり剰余をドローの数で割ったもの。これはと同じくらい小さい場合があります。ときと互いに素、あなたは十分に大きな値を選択することにより、廃棄物を任意に小さくすることができます。および一般的な値の場合u d d R dkNudd RdmodNugcdRNRdkNudRdmodNugcd(R,N)RNdRN、と別々に考慮する必要があるため、計算はより複雑になりますが、十分に大きいグループで無駄を小さくすることができます。gcd(R,N)N/gcd(R,N)

実際には、比較的効率の悪い乱数(暗号化など)であっても、が小さい場合を除き、単純な拒否サンプリング以外の価値はほとんどありません。たとえば、が通常2のべき乗で、が通常数百または数千ビットである暗号化では、均一な乱数生成は通常、所望の範囲での直接拒否サンプリングによって進行します。NRN


最初の証明には欠陥がありますの存在は強すぎます。任意の多くの要素を消費するマシンを使用できますが、常に終了します。基本的に、1つのシーケンス(終了しないシーケンス)を除外しますが、有限数以外のすべてを除外します。m
ラファエル

@Raphael私はあなたが何を言っているのか理解していない。そのような機械の例を挙げていただけますか?
ジル 'SO-悪であるのをやめる

ああ、私の懸念はあまりにも一般的でした。ここで-入力がない場合-あなたは正しいです。すべての計算が終了すると、有限数(入力なし、ステップごとの有限数の決定、有限ツリーのエルゴ)が存在するため、を与える最長のものがあります。m
ラファエル

@Raphaelあなたのコメントは、TCSの視聴者にとってより良いプレゼンテーションを考えさせてくれます。オラクルではなくTMの入力をRNGにしてください。TMが終了すると仮定します(そうでない場合、アルゴリズムは正しくありません)。入力が何であれ、TMが最大で入力セルを調べるようながある場合、< blahで割り切れる何とか何も確率の結果を得ることができません>。それ以外の場合、すべてのに対して、少なくとも回の描画が必要になる確率は少なくともです。m R m N m m R mmmRmNmmRm
ジル「SO-悪であるのをやめる」

1
@Raphael:Königの補題は、マシンが常に終了する場合、実際には実行時間に上限があることを示しています。これは、RNGの出力セットが有限である限り機能します(そうでない場合は、わずかにfalseです)。
ユヴァルフィルム

6

シャノンのソースコーディング定理は、正確な意味で、タイプサンプル(平均)が必要で、タイプ。より正確には、シャノンは、最初のタイプのサンプルが与えられる(非効率的な)アルゴリズムを提供し、2番目のタイプのサンプルを高い確率で出力します。また、高い確率でサンプルを出力することは不可能であることを示しています。[ 0 R 1 ] [ 0 N 1 ] m m log N / log R ϵ m log N / log R + ϵ logN/logR[0,,R1][0,,N1]mm(logN/logRϵ)m(logN/logR+ϵ)

シャノンの定理は、スキューされた入力分布(およびおそらくスキューされた出力分布)のより一般的なケースでも機能します。その場合、対数をエントロピーに置き換える必要があります。定理によって与えられるアルゴリズムはランダムに定義されますが、場合によっては、ランダム化を解除することもできます(パフォーマンスが多少低下します)。


5

実際、いいえ、拒否サンプリングは唯一の方法ではありません。残念ながら、コンピュータはビットとして全ての情報を格納し、したがって情報のみのランダムビットを操作できることを考慮すると、範囲の一様確率変数描画する任意のアルゴリズムバイナリベースの開発ならば、無限大になり無限大です。NNN

この定理は、Knuth and Yao(1976)による古典的な結果であり、DDGツリー(離散分布生成ツリー)のフレームワークを開発しました。

Gillesによって公開されたメソッドは、拒否によって発生する無駄を軽減するために行われた典型的な種類ですが、もちろん次のKnuthとYaoのツリーを生成できる場合は、はるかに効率的です-ランダムビットの平均96%保存されます。

これについては、次のCStheory投稿で詳しく説明しました。

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