제목: 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));
}