web-dev-qa-db-ja.com

ランダムに生成された数が均一に分布していることを証明する

この質問はインタビューで尋ねられました。

[0、N)の間の数を生成する乱数ジェネレータが与えられた場合、この数が均一に分散されていることを証明する方法。

この問題にどのように取り組むかわかりません、何か提案はありますか?

50
J.W.

それを証明するには、使用されているアルゴリズムを理解し、すべての状態のセットがサイクルを構成し、サブサイクルがないことをグラフで示す必要があります。 、およびNを法とする状態空間のカーディナリティはゼロであるため、他よりも多い/少ない頻度で発生する状態のセットはありません。たとえば、64ビットバージョンのサイクル長が2であっても、メルセンヌツイスターが均一に分散されていることがわかります。19937-1であり、宇宙の存続期間中に列挙することはできません。

それ以外の場合は、統計的検定を使用して均一性の仮説を検定します。統計は結果を証明できず、仮説を否定できません。サンプルサイズが大きいほど、仮説を反証する失敗が強くなりますが、それが証明になることはありません。 (この視点は、私が知っている他の何よりも、非統計学者/非科学者とのコミュニケーションの問題を引き起こします。)ほんの数例を挙げると、カイ2乗検定、Anderson-Darling、およびKolmogorov-Smirnovを含む、均一性の多くの検定があります。

すべての均一性テストは0,1,2、...、N-1,0,1、...などの一連の値を通過させるため、優れたジェネレータがあると言うには均一性では不十分です。また、間隔テスト、上昇/下降、平均の上/下の実行、「誕生日」テストなどのテストとのシリアル相関をテストする必要があります。

均一性とシリアル相関のかなり包括的なテストスイートは、キャリアの過程でジョージマーサリアによって作成され、1995年に冗談で「 Diehardテスト 」と呼んだものとして公開されました(これはヘビーデューティーであるため)テストのバッテリー)。

79
pjs

ブラックボックステスト(ソースコードにアクセスできない)の場合、均一に分散されている(UD)ことを証明できません。ただし、統計テストを実行して、UDである可能性を見つけることができます。ジェネレーターを何度も(たとえば、N * X回)実行し、0からNまでの各数値がX回前後に表示されているはずです。

これは、乱数であるかどうかを完全に無視し、均一性にのみ焦点を当てています。ただし、無限のテストを実行する場合にのみ、ジェネレーターが均一に分散されていることが証明されます。せいぜい、最初のN * X回の反復でジェネレータが均一になる可能性がありますが、実装は簡単で簡単です。

19
BlueMoon93

ジェネレータは最初に均一な分布を生成し、後で非均一な分布に逸脱する可能性があるため、それを証明する方法はありません。

9
Antti Huima

これは面接なので、本当の問題は均一な分布を証明することではなく、本当の問題は仕事に選ばれることです。面接担当者が高度な数学についての興味深いディスカッションを探しているのか、それとも実際の思考をテストしているのかをすばやく判断する方法を提案します。私は、面接官が後者を探している可能性が高いと思います。良いインタビューの答えは次のようになります:「それはすべて、乱数ジェネレーターが必要とされるものに依存します。音楽プレーヤーでシャッフル機能を提供する場合、100の数字を生成させ、平均がおおよそN/2に等しいかどうかを確認します。 、次に数字をざっと見てみると、その時点で満足できます。目的が暗号化に関連するものである場合、それは別の話になります。研究を開始しますが、おそらく自分で証明することはできませんが、既存の独立した証明について」.

7
OldFrank

ちょうどoneジェネレータからの数、または必要な数だけですか? 1つだけでは、均一性について何も言えません。 0≤number <Nである限り、問題はありません。

インタビュアーが「[多数の結果の均一性]」を意味すると仮定すると、結果の分布と結果のパターンの両方を調べる必要があります。 1つ目は、結果を並べ替えてビニングし、結果のヒストグラムを確認することです。これは、多数の値に対して合理的に「フラット」(たとえば、ガウス曲線ではない)である必要があります。

2番目のテストは、パターン2、3、または4以上の数値を取得する可能性があるため、少し難しいです。私が見た1つのテストは、トリプレットの場合、3つのグループの結果を球面座標でプロットすることです(1つは方位角、2つ目は高度、3つ目は半径です)。詳細は覚えていませんが、IIRCでは均一に満たされた球体などが表示されているはずです。このテストにはおそらく正式な用語がありますが、RNGが何を行っているかを確認するためのテストがいくつかあるため、最後の数字から次の数字を予測することは困難です(明確なパターンはありません)。 。

3
Phil Perry

最初に、彼らがどれだけ早く答えを欲するか、そしてあなたが発電機を手に入れたらどれほど良い答えが欲しいかを尋ねることから始めます。

はい、徹底したい場合は、包括的な統計テストのセットを実行するのがいいです。しかし、それは数日または数週間かかる場合があります。状況によっては、すぐに回答を求めている多数の人々とのミーティングで質問が行われる場合があり、最良の答えは、ミーティングのすぐそこにあるgoogleを使用して、ジェネレータが「十分」であるかどうかを確認することです。他のユーザー。 「クイックグーグル」と「包括的なテスト」の間には、さまざまな答えがあります。

現実的には、ジェネレーターがすべての状況で100%均一であることを証明することはできないことを述べたことのボーナスポイント。ケースは次のとおりです。

1)ソースコードを見ることはできません。したがって、一様に見えるN個の乱数を生成したとしても、N + 1以降のすべての数が10などであることを知るためには、さらに数を生成する必要があります。どこで停止しても、まだ生成していない番号については主張できません

2)ソースコードを見ることができます。非常に単純な線形合同生成器でない限り、理解するのはおそらく醜いでしょう。あまりに醜い場合は、コードを賞賛する以外に、確固たる結論を下すことができなかったと思います。

リスクはありますが、アプリケーションに乱数ジェネレーターへの呼び出しの予測可能な数がある場合、そのジェネレーターをその多くの呼び出しについてテストできることは言及する価値があります。ただし、これを誤って解釈し、堅牢で拡張性の高いアルゴリズムを作成する方法がわからないと想定するインタビュアーを見たことがあります。

3
mark mitchell

これはインタビューにとっては少し残酷な質問です(これが研究職であった場合を除きます)が、フォーラムにとっては楽しい質問です。数学の学位を取得してから20年後、私は自分で書いたランダムジェネレーターをランダムであることを数学的に証明したものを陽気に提示したでしょう。そのコードを今見てみると、自分が書いたとは信じがたいことがわかります。最近、私は実際のプログラマーが行うことを行い、NAG、numpy、matlab、または他の尊敬されるパッケージ(NAGを信頼する)によって実装されたアルゴリズムを使用し、おそらく分布が重要であるかどうかを確認するためにいくつかの簡単な統計分析を行いますなんらかの理由で。

面接で重要なのは正直に言うことです。わからない場合は、調べる必要があることを伝えます。あなたが知らなくて、それを調べることに興味がないなら、それも彼らにそれを言っても大丈夫です。絶え間ない調査を必要とする挑戦的な仕事をすることは、雇用主が良い労働環境を提供することで応えるものでなければなりません。挑戦は良いですが、対立的で競争力があると逆効果になります(「C」が多すぎる)。

1
MagicLAMP

Princeton Companion to Mathematics に、これに関するアクセシブルな議論があります。

しかし、決定論的コンピューターを使用して、10 30と10 31の間の1万個の乱数を選択するにはどうすればよいでしょうか。答えは、実際には必要ないということです。ほとんどの場合、代わりに擬似ランダム選択を行うのに十分です。 ...

いつそのようなシーケンスを「ランダム」と見なす必要がありますか?繰り返しますが、多くの異なる答えが提案されています。 1つのアイデアは、単純な統計検定を検討することです。長期的には、ゼロの頻度は1の頻度とほぼ同じであり、より一般的には00110などの小さなサブシーケンスは「正しい」頻度で表示されるはずです(このシーケンスの場合、1/32は長さが5であるためです。

ただし、シーケンスがこれらの単純なテストに合格することは可能ですが、確定的な手順で生成することは完全に可能です。 0と1のシーケンスが実際にランダムであるかどうか、つまりコインを投げるなどの手段によって生成されるかどうかを決定しようとしている場合、同じシーケンスを生成するアルゴリズムを特定できれば、シーケンスが非常に疑わしくなります。 。たとえば、統計的検定に合格した場合でも、πの数字から単純な方法で導出されたシーケンスを拒否します。ただし、シーケンスが再帰的な手順で生成できないことを尋ねるだけでは、ランダム性についての適切なテストは行われません。たとえば、そのようなシーケンスを取り、そのシーケンスの項をゼロで置き換えると、新しいシーケンスが得られます。ランダムにはほど遠いですが、それでも再帰的に生成することはできません。

このため、フォンミーゼスは1919年に、1の頻度の制限が1/2である場合だけでなく、同じことが任意のサブシーケンスにも当てはまる場合、0と1のシーケンスをランダムに呼び出す必要があると提案しました。 「合理的な手順で」抽出できます。 1940年に、教会は「合理的な手順による」を「再帰的な関数による」に変換することにより、これをより正確にしました。ただし、この条件でも弱すぎます。「反復対数の法則」(ランダムシーケンスが満たすもの)を満たさないシーケンスがあります。現在、1966年に定式化されたいわゆるマーティン・レーフ論文は、ランダム性の最も一般的に使用される定義の1つです。ランダムシーケンスは、すべての「有効な統計的逐次検定」を満たすシーケンスです。ここで正確に定式化しますが、これは本質的な方法で再帰関数の概念を使用します。ほとんどすべての数学者が同意する教会の論文とは対照的に、マーティン=ロフの論文はまだ非常に議​​論されています。

1
Colonel Panic