PHP快速生成随机数

时间:2012-11-23     作者:smarteng     分类: PHP相关


Knuth的算法S

  依次考虑整数 0,1,2,……,n-1,通过一个适当的随机测试对每个整数进行选择。通过按序访问整数,保证输出结果有序。

  设m=2, n=5,那么选择第一个整数0的概率就是2/5,这种确定概率,通过 if (rand()%5) < 2 来判断是否选取该数字,然后判断是否选择整数1,若0被选中,以 1/4 的概率选择1, 若0未被选中,以 2/4 的概率选择1,…… ,总之,对于从r个剩余整数中选s个,以 s/r 来选择下一个数。

看到别人写的C++ ,我来一个php的:

<?php
function getknuth($m,$n){
    for($i=0;$i<$n;$i++)
        if(rand() %($n-$i) <$m){
            echo $i ."\n";
            $m--;
        }
}
?>