zoukankan      html  css  js  c++  java
  • 抽奖概率算法

    不同概率的抽奖原理就是把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);

  • 相关阅读:
    Nginx配置文件的路径
    有关Tomcat 8.5版本文件上传后无权限访问的问题
    常见HTTP状态码列表
    服务器BMC(带外)
    CDN问题
    PECE
    linux系统概述
    干货--整蛊你的舍友
    arp请求与回复
    huawei oceanstor
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/13748894.html
Copyright © 2011-2022 走看看