首页 > 编程语言 > 详细

抽奖概率算法

时间:2020-09-29 13:11:03      阅读:21      评论:0      收藏:0      [点我收藏+]

不同概率的抽奖原理就是把0到*(比重总数)的区间分块

分块的依据是物品占整个的比重,再根据随机数种子来产生1-* 中的某个数

判断这个数是落在哪个区间上,区间对应的就是抽到的那个物品。

随机数理论上是概率均等的,那么相应的区间所含数的多少就体现了抽奖物品概率的不同

<?php
function getRand($proArr) {   
    $result = [];
    foreach ($proArr as $key => $val) { 
        $arr[$key] = $val[‘v‘]; 
    } 
    // 概率数组的总概率  
    $proSum = array_sum($arr);        
    asort($arr);
    // 概率数组循环   
    foreach ($arr as $k => $v) {   
        $randNum = mt_rand(1, $proSum);   
        if ($randNum <= $v) {   
            $result = $proArr[$k];   
            break;   
        } else {   
            $proSum -= $v;   
        }         
    }     
    return $result;
}

$arr = [   
    [‘id‘=>1, ‘name‘=>‘特等奖‘, ‘v‘=>1],
    [‘id‘=>2, ‘name‘=>‘一等奖‘, ‘v‘=>5),
    [‘id‘=>3, ‘name‘=>‘二等奖‘, ‘v‘=>10],
    [‘id‘=>4, ‘name‘=>‘三等奖‘, ‘v‘=>12],
    [‘id‘=>5, ‘name‘=>‘四等奖‘, ‘v‘=>22],
    [‘id‘=>6, ‘name‘=>‘没中奖‘, ‘v‘=>50]
];  

$result = [];
for($i=0; $i<10000; $i++) {
    $rand = getRand($arr);
    isset($result[$rand[‘name‘]])? $result[$rand[‘name‘]]+=1: $result[$rand[‘name‘]] = 1;
}
asort($result);
var_dump($result);

技术分享图片

 

抽奖概率算法

原文:https://www.cnblogs.com/cshaptx4869/p/13748894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!