/*

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

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

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

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

*/

function get_rand($proArr)

{

$result = array();

foreach ($proArr as $key => $val) {

$arr[$key] = $val['v'];

}

$proSum = array_sum($arr); // 计算总权重

$randNum = mt_rand(1, $proSum);

$d1 = 0;

$d2 = 0;

for ($i=0; $i < count($arr); $i++)

{

$d2 += $arr[$i];

if($i==0)

{

$d1 = 0;

}

else

{

$d1 += $arr[$i-1];

}

if($randNum >= $d1 && $randNum <= $d2)

{

$result = $proArr[$i];

}

}

unset ($arr);

return $result;

}

/*

* 使用较多的为这个方法

*/

function get_rand1($proArr) {

$result = array();

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;

}

/*

* 奖项数组

* 奖品id,名称,比重

*/

$arr = array(

array('id'=>1,'name'=>'特等奖','v'=>1),

array('id'=>2,'name'=>'一等奖','v'=>5),

array('id'=>3,'name'=>'二等奖','v'=>10),

array('id'=>4,'name'=>'三等奖','v'=>12),

array('id'=>5,'name'=>'四等奖','v'=>22),

array('id'=>6,'name'=>'没中奖','v'=>50)

);

测试结果(10000次):

get_rand():

count_1:0 count_2:490 count_3:1021 count_4:1172 count_5:2172 count_6:5145

特等奖中奖率全为:0

get_rand1():

count_1:92 count_2:477 count_3:1017 count_4:1195 count_5:2264 count_6:4955

总体感觉 get_rand1() 更准确些......

php概率计算_php 抽奖概率算法相关推荐

  1. php概率计算_PHP指定概率算法

    PHP指定概率算法,可用于刮刮卡,大转盘等抽奖算法. 假设:有一个二维数组,记录了所有本次抽奖的奖项信息: $test_arr =array('a'=>20,'b'=>30,'c'=> ...

  2. php概率计算_php 中奖概率算法

    上次项目中有个抽奖活动,中奖概率算法整理成一篇笔记 /** * 中奖概率算法 * v表示中奖概率,注意其中的v必须为整数,可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基 ...

  3. php概率计算_PHP 真实概率计算(百分比随机分配)

    其实随机这个东西,很多人都会做.在PHP中更是存在rand()随机函数,如果只是随机一个数当然不错.但是如果是要呈现出来具体的内容给人选择就是不一样了.当然这个在现在想来,呵呵其实也一样.现实rand ...

  4. php抽奖概率算法(刮刮卡,大转盘)

    抽奖,概率不变化: 经典的概率算法函数:如下 <?php /*  * 经典的概率算法,  * $proArr是一个预先设置的数组,  * 假设数组为:array(20,30,50),  * 开始 ...

  5. php常用抽奖概率算法(抽奖,大转盘,广告首选)

    算法一 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /**  * 全概率计算  *  * @param array $p array('a'=> ...

  6. paip 刮刮卡砸金蛋抽奖概率算法跟核心流程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! paip ...

  7. Python计算斗牛游戏概率算法实例分析

    这篇文章主要介绍了Python计算斗牛游戏概率算法,简单介绍了斗牛游戏的原理并结合具体实例形式分析了相关的游戏概率算法,需要的朋友可以参考下 本文实例讲述了Python计算斗牛游戏概率算法.分享给大家 ...

  8. python计算数据百分比_概率计算:定义概率分布数据结构,Python实现概率分布计算...

    使用Python实现马尔科夫随机场.蒙特卡洛采样等随机过程算法的前提,就是用Python实现概率的计算.并不只是数值计算,而是能够将随机模拟中常用的各种概率相关的操作,都能用计算机的数据结构来表达,其 ...

  9. 【数据挖掘】高斯混合模型 ( 与 K-Means 每个步骤对比 | 初始参数设置 | 计算概率 | 计算平均值参数 | 计算方差参数 | 计算高斯分布概率参数 | 算法终止条件 )

    文章目录 I . 高斯混合模型 ( 样本 -> 模型 ) II . 高斯混合模型 ( 模型 -> 样本 ) III . 高斯混合模型 与 K-Means 迭代过程对比 IV . 高斯混合模 ...

最新文章

  1. grub resourceunknown filesystem异常处理
  2. static的三种用法,定义静态变量,静态函数,静态代码块!
  3. (43)内存装载驱动
  4. 【ElementUI】 table表格尾部的合计行,固定表头却不显示合计行
  5. 2018值得一看的GAN论文回顾
  6. 人人影视字幕组因盗版视频被查 涉案金额1600余万元
  7. mysql5.6源码自动安装脚本
  8. 什么是面向服务的体系结构(SOA)?(转载)
  9. java jxl 复制单元格_如何用JAVA(如poi、jxl等)读取excel文件中的下拉框单元格的值。...
  10. 卡方分箱(chi-square)1
  11. 计算机组成原理课程设计
  12. 蓝屏蓝屏代码查询器_蓝屏点播?
  13. 推荐十款很好用的HTML工具编写软件
  14. ET框架-03 ET框架-Demo工程的编译与运行
  15. 制作u盘winpe启动盘_RUFUS.小巧的U盘启动盘制作工具
  16. c 自动打印的服务器,C-Lodop云打印服务器 x64
  17. 不负春光 清风徐徐入手心 一寸光阴一寸金
  18. 推荐10个免费在线测试网页性能工具
  19. NAT地址转换协议学习
  20. 【CS231n 课程笔记】第八讲-----常见的深度学习框架,以及GPU和CPU介绍。

热门文章

  1. 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手
  2. ajax 微信code获取_ajax 实现微信网页授权登录的方法
  3. 通过doi可以检索到文献_怎么查看中外文献的期号和卷号?
  4. leetcode-26-删除排序数组中的重复项
  5. spring security 学习二
  6. EF 执行存储过程方法
  7. Docker的网络模式和跨主机通信
  8. Action Service Dao三层的功能划分
  9. 编译程序提示配置PKG_CONFIG_PATH
  10. HTML5文档结构 摘要