>  기사  >  백엔드 개발  >  동일하지 않은 확률로 난수를 생성하는 방법에 대한 몇 가지 아이디어

동일하지 않은 확률로 난수를 생성하는 방법에 대한 몇 가지 아이디어

巴扎黑
巴扎黑원래의
2016-11-29 10:23:011533검색

제목: 0부터 9까지의 난수를 생성합니다. 발생 확률이 0부터 9까지 순서대로 감소하도록 요구합니다.

일반적인 아이디어는 0 10개, 1 9개, 2 8개... 2 8과 1 9를 배열에 넣은 다음 배열 첨자를 무작위로 생성하고 첨자에 따라 숫자를 추출합니다.

두 번째 아이디어: 0부터 9까지 두 개의 난수를 생성하고 더 작은 것을 취합니다. 이 아이디어(팔찌의 마법의 부적에서 제안)는 실제 원리를 알지 못하지만 실험을 통해 실제로 효과를 얻을 수 있음이 입증되었습니다.

확인 방법:

프로그램 코드

< ;?php

function fun(){

$num = rand(0,9); //10 이내의 숫자는 균등하게 분포됩니다.

$ num2 = rand(0 ,9);

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

return $return;

}

function totalStr($haystack, $needle,$i = 0){//특정 문자가 문자열

에 나타나는 횟수를 확인합니다. while(strpos( $haystack,$needle) ! == false) {

$haystack = substr($haystack, (strpos($haystack,$needle) + 1));

$i++;

}

return $i;

}

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

$str .= fun ();

}

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

echo totalStr($ str,"$i") ."n"; //0~9 발생 횟수

}

?>


이 글을 작성한 직후 팔찌 참에 최적화된 알고리즘이 있습니다.

자세한 내용은 아래를 참조하세요.

프로그램 코드

function getRand($min,$max) {

$num =rand($min,$max);

return rand($min,$num);

}


다른 전문가가 작성한 함수, 강력한 수학적 아이디어로 이해하기 쉽지 않음

프로그램 코드

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

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

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

}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.