php抽奖程序与随机广告实现算法

原创
2016-07-25 08:53:34 1038浏览
  1. /**
  2. * 全概率计算
  3. *
  4. * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4)
  5. * @return string 返回上面数组的key
  6. */
  7. function random($ps){
  8. static $arr = array();
  9. $key = md5(serialize($ps));
  10. if (!isset($arr[$key])) {
  11. $max = array_sum($ps);
  12. foreach ($ps as $k=>$v) {
  13. $v = $v / $max * 10000;
  14. for ($i=0; $i<$v; $i++) $arr[$key][] = $k;
  15. }
  16. }
  17. return $arr[$key][mt_rand(0,count($arr[$key])-1)];
  18. }
复制代码

例2,php抽奖程序 算法二

  1. function get_rand($proArr) {
  2. $result = '';
  3. //概率数组的总概率精度
  4. $proSum = array_sum($proArr);
  5. //概率数组循环
  6. foreach ($proArr as $key => $proCur) {
  7. $randNum = mt_rand(1, $proSum);
  8. if ($randNum <= $proCur) {
  9. $result = $key;
  10. break;
  11. } else {
  12. $proSum -= $proCur;
  13. }
  14. }
  15. unset ($proArr);
  16. return $result;
  17. }
复制代码

上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空减,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。

这个算法简单,而且效率非常高,关键是这个算法已在以前的项目中有应用,尤其是大数据量的项目中效率非常棒。



声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
上一条:windows与linux伪静态规则写法 下一条:Js php多项选择删除

相关文章

查看更多