-1

この質問をするのは本当に恥ずかしいですが、修正する時間がありません。また、英語のネイティブ スピーカーではないので、数学の語彙が不足していることをお許しください。

確率を変数に割り当ててからランダムに選択する必要があるプログラムを書いています。

例:

私がコインを持っていると想像してください。表に 70%、裏に 30% の確率を割り当てたいと思います。私がトスしたとき、表が出る確率が 70%、裏が出る確率が 30% になるようにしたいと考えています。

それを行う愚かな方法は、セルの配列を作成して、頭に 70 個のセルを挿入し、尾を 30 個に挿入することです。それらをランダム化し、ランダムに 1 つ選択します。

編集 1: 2 つの変数に限定されないことも指摘したいと思います。たとえば、(*,\$,#) の中から選択する 3 つの文字があり、それぞれにおそらく次を割り当てたいとします * = 30%、\$ = 30%、および # = 40%。

そのため、ランダム関数を使用したくなく、数学的にどのように行われるかを確認したかったのです。

4

4 に答える 4

2

あなたはそれを行う別の方法をしたいですか?ほとんどの rand 関数は、[0, 1) から 10 進数を生成します。30% の場合、チェック生産数は 0.3 未満です

ただし、認識された「ランダム性」を実際にテストすると、実際にはランダムではありません..

PHP では、rand(0, 99) (double の代わりに整数、0.3 の代わりに 30) を使用できます。PHP rand 関数は閉区間です (両方を含む)

function randWithWeight($chanceToReturnTrue) { // chance in percent
    return rand(0, 99) < $chanceToReturnTrue;
}

編集:知覚されるランダム性についてのメモ。あなたは数学から来たと言っているので、いくつかの数学... 0 から 99 までの数字を生成し、それらを配列に追加します。配列に重複が含まれている場合は停止します。通常、約20回のパスが必要です(複製する前に3〜21回のパスを取得しており、10回以上試行しています)。したがって、「ランダム」として期待するものではありません。とはいえ、(私は軌道から外れていることはわかっています)、誕生日の問題を見てください。見た目よりも「ランダム」です。

于 2013-01-10T07:51:33.653 に答える
1

30% の確率が必要な場合は、

if(rand(1,100) <= 30){
    // execute code
}
于 2013-01-10T07:53:27.480 に答える
1

1つの方法は

$r=rand(1,100);
if($r<70)
{
   echo "Head";
}
else
{
   echo "Tail";
}
于 2013-01-10T07:54:26.557 に答える
1

加重ランドを計算する簡単な関数を次に示します。

<?php
function weightedRand($weights, $weight_sum = 100){
    $r = rand(1,$weight_sum);
    $n = count($weights);
    $i = 0;
    while($r > 0 && $i < $n){
        $r -= $weights[$i];
        $i++;
    }
    return $i - 1;
}

この関数は配列を受け入れます。たとえば、array(30,70)30% の確率で を取得0し、70% の確率で を取得し1ます。これは、複数の重みに対して機能するはずです。

その原理は、ゼロ以下になるまで、生成された乱数を重みで減算することです。

デモあり30%:70%
デモあり20%:30%:50%

于 2013-01-10T08:11:33.117 に答える