Home  >  Article  >  Backend Development  >  Some ideas on generating random numbers with unequal probabilities

Some ideas on generating random numbers with unequal probabilities

巴扎黑
巴扎黑Original
2016-11-29 10:23:011418browse

Title: Generate random numbers from 0 to 9. The probability of occurrence from 0 to 9 is required to decrease in sequence.

The general idea is to put 10 0s, 9 1s, 8 2s...2 8s, and 1 Put 9 into the array, then randomly generate the array subscript, and extract the number according to the subscript.

Second idea: Generate two random numbers from 0 to 9, and take the smaller one. This idea (proposed by the bracelet magic) is actually I don’t know what the principle is, but experiments have proved that it can indeed achieve the effect.

Verification method:

Program code

function fun(){

  $num = rand(0,9); //Numbers within 10 are evenly distributed

$num2 = rand(0,9);

($num2<=$num) ? $return.=$num2 : $return.=$num;

return $return ;

}

function totalStr($haystack, $needle,$i = 0){//Check the number of times a certain character appears in the string

while(strpos($haystack,$needle) !== false) {

                    $haystack = substr($haystack, (strpos($haystack,$needle) + 1)); i=0 ;$i<=1000;$i++){

$str .= fun();

}

for ($i=0;$i<=9;$i++){

echo totalStr($str ,"$i")."n"; //The number of occurrences of 0-9

}

?>

Shortly after writing this piece, the bracelet magic algorithm has been optimized

For details, see Below:

Program code

function getRand($min,$max) {


                                                                                      using   using        .

There is also a function written by another expert, which has strong mathematical ideas and is not easy to understand.

Program code

function getRandomByFactor($max,$factor=2){

$c = rand(0, pow($max,$factor));

return $max - ceil(pow($c,1/$factor));

}

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn