随机数是不是均匀分布,实践来说话:
function testRand($randFunction, $groupsNumber = 10, $rollsNumber = 200)
$frequencies = array_fill(0, $groupsNumber, 0);
foreach (range(1, $rollsNumber) as $ignored) {
if ($randFunction == 'lcg_value') {
$frequencies[$randFunction() * 10]++;
} else {
$frequencies[$randFunction(0, $groupsNumber - 1)]++;
echo PHP_EOL, "------- results for `$randFunction` -------", PHP_EOL;
$cum = 0;
foreach ($frequencies as $index => $frequency) {
$percent = $frequency * 100 / $rollsNumber;
$cum += $percent;
echo sprintf("%d\t|\t%4d\t%6.2f\t%6.2f", $index, $frequency, $percent, $cum), PHP_EOL;
testRand('rand');
testRand('mt_rand');
testRand('lcg_value');
实测结果如下:
------- results for `rand` -------
0 | 29 14.50 14.50
1 | 18 9.00 23.50
2 | 24 12.00 35.50
3 | 13 6.50 42.00
4 | 26 13.00 55.00
5 | 15 7.50 62.50
6 | 25 12.50 75.00
7 | 22 11.00 86.00
8 | 15 7.50 93.50
9 | 13 6.50 100.00
------- results for `mt_rand` -------
0 | 23 11.50 11.50
1 | 21 10.50 22.00
2 | 22 11.00 33.00
3 | 19 9.50 42.50
4 | 18 9.00 51.50
5 | 21 10.50 62.00
6 | 18 9.00 71.00
7 | 20 10.00 81.00
8 | 21 10.50 91.50
9 | 17 8.50 100.00
------- results for `lcg_value` -------
0 | 15 7.50 7.50
1 | 20 10.00 17.50
2 | 16 8.00 25.50
3 | 18 9.00 34.50
4 | 20 10.00 44.50
5 | 15 7.50 52.00
6 | 28 14.00 66.00
7 | 28 14.00 80.00
8 | 23 11.50 91.50
9 | 17 8.50 100.00
从表中我们看到,同样是随机生成从0到9的10个整数,如果我们用rand函数的话,最少的数只产生了6.5%,最多的产生了14.5%,而如果用mt_rand的话,最少的产生了8.5%,最多的产生了11.5%,而lcg_value最少的产生了7.5%,最多的产生了14%。
显然,mt_rand产生的结果更加『均匀』,lcg_value其次,最不均匀的是rand。
$Money=array(1,2,3,3,4,4,5,5,6,6,7,7,8,8,9,10);$Res=AccordingToMPA($Money,array('1'=>'Admin','2'=>'张三','3'=>'庆庆','4'=>'鹏鹏','5'=>'Admin','6'=>'张三','7'=>'庆庆','8'=>'鹏鹏',));pr...
rand
均匀分布
的
随机数
或矩阵语法Y = rand(n)Y = rand(m,n)Y = rand([m n])Y = rand(m,n,p,...)Y = rand([m n p...])Y = rand(size(A))rands = rand('state')描述rand函数产生由在(0, 1)之间
均匀分布
的
随机数
组成的数组。Y = rand(n) 返回一个n x n的
随机
矩阵。如果n不是数...
需求是这样的,根据可变参数 $people 来给每个人
随机
分配百分比,条件是人数一定会控制在 3 < N < 100,弱条件是尽量保证每个人分配到的比例在 30% 一下,不会出现极值。写了个简单的分配,但会出现最后一个人会得到很多的情况,并且由于分配区间实际上是 1 - 平均数 之间的百分比,不是严格意义上的 “
随机
平均分配
”,求各位大大给个思路,抛砖引玉,不甚感谢。$people =...
我玩得很开心!function rank($input){$output = array();$ranking = $input; sort($ranking); $ranking = array_flip($ranking);$last_val = -1;foreach($ranking as $key => $val){$repetitions = ($val-$last_val-1);...
在WooCommerce中,当客户从购物车结账并提交订单时,如果未处理付款,则订单将设置为“待处理”付款.管理员未收到任何有关的电子邮件.我想向管理员发送电子邮件以获取此类订单.我该怎么做?解决方法:更新2(感谢CélineGarel,从woocommerce_new_order变为woocommerce_checkout_order_processed)当新订单获得待处理状态并自动触发“新订单”...
这篇文章主要介绍了
PHP
实现的简单排列组合算法,结合具体应用实例分析了排列组合算法的实现与使用技巧,需要的朋友可以参考下本文实例讲述了
PHP
实现的简单排列组合算法应用。分享给大家供大家参考,具体如下:一、问题:给你一个40斤的西瓜,给3个人分,有多少种分法?二、
PHP
实现代码:$aa = range(1,40);$bb = array();foreach($aa as $k=>$val){f...
1、把人员分成 20组2、5个实验台1 实验台需要2小时2 实验台需要 3小时3 实验台需要 4小时4 实验台需要 1小时5 实验台需要 5小时3、每个实验台 每个小组必须都做一遍。4、一天做不完,可以推到第二天,第二天完不成可以再推 等等5、第一小组占用实验台 ,第二小组可以选择别的实验台,第三小组等等类推6、假设 2017-11-1日开始假如上午8点开始 12点结束假如下午13点开始 18点结...
直接上代码import java.util.Iterator;import java.util.TreeSet;public class Hongbao {private final int[] moneyList;private final int number;private final int totalMoney;private int cur;public Hongbao(int num...
需求:5000元,
随机
分给10000人,要求每个人最少0.01,最大50;分析:5000元分给10000人,平均每人0.5,如果
随机
0.01-50,那么平均值就在25左右,这就有问题了分化为两种结果:1,在保证剩余人至少能分到0.01的情况下,按照0.01-50进行
随机
分配,这种会每个金额都有,但是绝大部分会只有0.01,结果统计如下:范围概率0.0198.02%(0.01,5]0.209%(5-...
随机
函数Rand()的功能是返回大于等于0而小于1的
均匀分布
的
随机数
。我们可以利用此函数来生成一个
随机数
,若要生成A到B之间的
随机
实数,则可以使用公式“=int(Rnad()*(B-A)+A“来生成,下面用这个
随机
函数制作一个简易的
随机
抽号系统。Excel中
随机
函数Rand()使用方法制作一个如下图格式的工作表,可以根据你的爱好添加其它背景图片。在工作表下面的“设置”处设置你需要生成的
随机数
的最大...