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

WBOY
Libérer: 2016-07-25 08:53:34
original
1388 Les gens l'ont consulté
  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 }
  15. }
  16. return $arr[$key][mt_rand(0,count($arr[$key])-1)];
  17. }
复制代码

例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 $result = $key;
  9. break;
  10. } else {
  11. $proSum -= $proCur;
  12. }
  13. }
  14. unset ($proArr);
  15. return $result;
  16. }
复制代码

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

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



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal