2010-12-04 25 views
0

可能性の重複:
Expand a random range from 1-5 to 1-7乱数生成

こんにちは、 は、この質問は http://blog.seattleinterviewcoach.com/2009/02/140-google-interview-questions.htmlに ランダムな整数を生成機能を考えると

から取られます範囲1〜5、 I 1〜5乱数発生器を使用して、ほぼ等しい確率で7にすべての乱数1を生成する方法を取得していない午前7

の範囲1において ランダム整数を生成する関数を書きます。

誰でも解決できますか?

+0

配信は均一でなければなりませんか?あなたは、提供された関数から一様な分布を得ますか?あなたは提供された機能を無視できますか? :) –

答えて

1

与えられた関数が均等に分散された数値を提供し、書き込みが必要な関数が均一に分散した数値を返すという厳密な要件があるとします。

do { 
    rand25 = (rand5() - 1) * 5 + rand5; // 1-25 
} while (rand25 > 21); 
return (rand25 - 1)/3 + 1; 
-1

どうFUNC約()+ FUNC()%3:

次の擬似コードは、(rejection samplingと呼ばれる)の標準的な技術を示しますか?

+0

が気付いただけで、確率は同じでなければなりません。この解決法は分布を変える。 – qutron

+0

これは 'func()'の配布プロパティを破壊するので、悪い考えです。 'func()%3'では '1'または '2'を得ることは '0'を得る確率が2倍であり、' func() 'は等しい分布を持つと仮定します。 – bitmask