博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php概率算法(转)
阅读量:6466 次
发布时间:2019-06-23

本文共 1346 字,大约阅读时间需要 4 分钟。

这是一个很经典的概率算法函数:

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;    }

 

转载于:https://www.cnblogs.com/sandea/p/5611466.html

你可能感兴趣的文章
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
转载:《TypeScript 中文入门教程》 16、Symbols
查看>>
C#技术------垃圾回收机制(GC)
查看>>
漫谈并发编程(三):共享受限资源
查看>>
【转】github如何删除一个仓库
查看>>
Linux系统编程——进程调度浅析
查看>>
openCV_java 图像二值化
查看>>
状态模式
查看>>
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
MySQL my.cnf参数配置优化详解
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>