php概率算法
2024-09-29 12:01:48
这是一个很经典的概率算法函数:
function get_rand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum); //抽取随机数
if ($randNum <= $proCur) {
$result = $key; //得出结果
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
假设:我们有这样一个数组:a奖概率20%,b奖概率30%,c奖概率50%
$prize_arr =array('a'=>20,'b'=>30,'c'=>50);
模拟函数执行过程:
总概率精度为20+30+50=100
第一次数组循环,$procur=20
假设抽取的随机数rand(1,100),假设抽到$randNum=55
if判断-------
如果$randNum<=20,则result=a
否则进入下一循环,总概率精度变为100-20=80
第二次数组循环,$procur=30
假设抽取的随机数rand(1,80),假设抽到$randNum=33
if判断---------
如果$randNum<=30,则result=b
否则进入下一循环,总概率精度变为80-30=50
第三次数组循环,$prosur=50;
假设抽取的随机数rand(1,50),不管怎么抽,随机数都会<或=50,
那么得出result=c;
因为样本没有改变,虽然可能抽取的随机数不止一个,但是概率是不变的。
或者也可以这样:
function get_rand($arr)
{
$pro_sum=array_sum($arr);
$rand_num=mt_rand(1,$pro_sum);
$tmp_num=0;
foreach($arr as $k=>$val)
{
if($rand_num<=$val+$tmp_num)
{
$n=$k;
break;
}else
{
$tmp_num+=$val;
}
}
return $n;
}
http://denghai260.blog.163.com/blog/static/7268640920128244332285/
最新文章
- mina框架详解
- 《C与指针》第十二章练习
- html中input文本框,初始里边有文字提示,当点击时,文字消失,怎么设置?
- 在项目中引用GreenDroid库
- 上传Android代码到Jcenter(解决了字符映射的问题)
- iOS获取的NSDate date时间与实际相差8个小时
- C#中的WebBrowser控件加载ActiveX插件
- PHP 关于 $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;]
- BeanUtils的日期问题
- poj1173 解题报告
- elk集成安装配置
- python教你用微信每天给女朋友说晚安
- MySQL入门介绍(mysql-8.0.13)
- java虚拟机的堆内存配置
- 547. Friend Circles
- 路由器桥接尝试WDS
- 用vue-cli脚手架搭建一个仿网易云音乐的全家桶vue项目
- python的队列和栈
- The Little Prince-12/02
- bzoj千题计划236:bzoj2300: [HAOI2011]防线修建