1.经典概率算法抽奖
$tmpItems = ['电脑'=>10, '相机'=>50, '100元现金'=>500];
$proSum = array_sum($tmpItems);
foreach ($tmpItems as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$resultId = $key;
break;
} else {
$proSum -= $proCur;
}
}
从count($tmpItems)总样本中随机一个数,循环的判断是否小于currentValue,小于便是中奖,大于就从总样本中扔掉currentValue ,继续循环产生随机数判断概率是否落入小于currentValue区间内。
封装为函数,支持概率为小数点 (小数点位数越多数据量越大)
function get_prize($prizeItems) {
$resultId = '';
$dec = explode('.', strval(min($prizeItems))); # 小数点拆分
$dec_len = isset($dec[1]) ? strlen($dec[1]) : ''; #小数点后长度
$radix = 1; # 乘积的基数
if ($dec_len) {
for ($i = 1; $i <= $dec_len; $i++) {
$radix*=10;
}
}
$tmpItems = [];
foreach ($prizeItems as $key => $value) {
$tmpItems[$key] = $value * $radix;
}
$proSum = array_sum($tmpItems);
foreach ($tmpItems as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$resultId = $key;
break;
} else {
$proSum -= $proCur;
}
}
return $resultId;
}
/**
* 电脑 概率为0.02% 十万分之二
* 相机 概率为0.2% 万分之二
* 100元现金 概率为1.8% 百分之一点八
* 德芙巧克力 概率为40% 十分之四
* 谢谢参与 概率为57.98% 百分之五十七点九八
*/
$prizeItems = ['电脑' => 0.0002, '相机' => 0.002, '100元现金' => 0.018,'德芙巧克力'=>0.4,'谢谢参与'=>0.5798];
print_r(get_prize($prizeItems));
2.全概率样本抽奖
js手机号批量滚动抽奖代码实现
我们平时在看一些选秀节目或一些歌唱类比赛节目时经常会看到在现场的大屏幕上会有观众的手机号在滚动来选出谁是幸运观众或谁中了什么奖项,这些手机号都是现场观众或场外观众在给选手投票时产生的,当主持人一声开始 ...
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...
javascript 转盘抽奖代码和计数器代码
要介绍了javascript圆盘抽奖程序实现原理和完整代码例子,需要的朋友可以参考下 看到网页上有不少大转盘抽奖的应用,心血来潮也想弄个.于是找了点资料自己研究... 效果预览: 一.模拟抽奖的实 ...
jQueryRotate 转盘抽奖代码实现
代码如下: 例子兼容IE6,7,8 以及高版本浏览器,如有bug请回复! 1.html结构 ...
html 抽奖代码
uccess">& ...
IOS调试技巧:当程序崩溃的时候怎么办 xcode调试
转自:http://www.ityran.com/archives/1143 ------------------------------------------------ 欢迎回到当程序崩溃的时候 ...
RBM
1. 玻尔兹曼分布: $$p(E) \thicksim e^{-E/kT} $$ 2. RBM 两层:隐层和可视层, $\mathbf v$, $\mathbf h$ $$v_i \in \{0, 1 ...
Nginx安装(官网翻译)
转载自:https://www.nginx.com/resources/wiki/start/topics/tutorials/install/ 二进制版本预包装的Linux和BSD大多数Linux发 ...