この質問は特定の面接や課題のためのものではなく、Quora に表示されたが誰も答えなかった質問です。75% の確率で true を返す関数 (実際にはどの言語でも) をどのように実装しますか? 統計は私の強みではなく、私にとってはそうする方法ですが、間違っていると思っています
void retTrue(){
srand(time(NULL));
if( (rand() % 4) == 0 ) return true;
else return false;
}
この質問は特定の面接や課題のためのものではなく、Quora に表示されたが誰も答えなかった質問です。75% の確率で true を返す関数 (実際にはどの言語でも) をどのように実装しますか? 統計は私の強みではなく、私にとってはそうする方法ですが、間違っていると思っています
void retTrue(){
srand(time(NULL));
if( (rand() % 4) == 0 ) return true;
else return false;
}
関数の潜在的な問題の 1 つを次に示します。 とrand()
の間のランダムな整数を返します。実際の保証はありませんが、RNG はこの間隔で一様な分布を生成するように設計されています。ただし、次のようにモジュロ演算子を使用すると、0
RAND_MAX
(rand() % 4) == 0
乱数の下位 2 ビットのみを見ています。問題は、一部の乱数ジェネレーターでは、下位ビットのランダム性が非常に弱い可能性があることです。25% の確率で発生する系列に依存しないランダム イベントを取得するより安全な方法は、次のとおりです。
((double) rand() / (double) RAND_MAX) < 0.25
rand()
区間全体にわたる要素としてのランダム[0,RAND_MAX]
性は、個々のビットのランダム性よりも信頼性が高くなります。
関数内で srand を呼び出したくありません。time() の分解能は 1 秒です。その関数を 1 秒以内に 100 回呼び出した場合、毎回同じ結果が得られます。
Second rand は通常、非常に優れた乱数ジェネレーターではありません。完全な 75% の比率を得ることはまずありません。
3 番目の戻り値の型は void であり、コンパイラ エラー以外は何も返されません。
どうですか:
bool retTrue(){
static unsigned int n = 0;
n++;
return n % 4 != 0;
}
ランダムである必要があるという言及はありませんでした。
Random Number Generator
Javaを使用して数値を生成するだけではどうですか。これは、等しい確率で数値を生成する場合、True
75% の時間を出力する必要があると思います。rand()
これが間違っている場合は修正してください
疑似コード
int generateNumber()
{
Random r = new Random();
int seed = r.nextInt(100);
if(seed < 25){
return false;
}else
{
return true;
}
}