概率算法

昨天想写一个抽奖类来玩玩。结果确没有思路,于是网上找了一个dome。参考学习之后发现最主要的是概率的计算。于是学习了一个。

改方法主要是将所有奖品概率随机一个数,来决定中奖奖品。通过循环来判断随机数是否为中奖奖品,如果不是,去掉该奖品重新判断。

/**
* 概率算法
* @access public
* @param array $arr 数组,奖品的id和概率
* @return int
*/

function rand($arr){

  $result = ‘‘;

  $porsum = array_sum($arr);

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

    $porsot = mt_rand(1,$porsum);

    if($porsot <= $val){

      $result = $key;

      break;

    }else{

      $porsum -= $val;

    }

  }

  unset($arr);

  return $result;

}

时间: 2024-08-18 20:44:15

概率算法的相关文章

数值概率算法(转 用来说明算法导论题目!!!)

随机化算法(2) — 数值概率算法 接着上一篇: 随机化算法(1) — 随机数 在这章开篇推荐下chinazhangjie总结的随机算法,因为咱两看的是同一本书,所以大家也可以去参考下他的,总结的很不错. http://www.cnblogs.com/chinazhangjie/archive/2010/11/11/1874924.html (顺便再PS一下,小杰也是我论坛的C/C++问题求助板块的版主,C/C++小牛) 这一章我就把书中的一个例子举出来了,感觉虽然很简单,但是很有意思. 用随机

有趣的概率算法--生日悖论

在算法导论书上看到个比较有意思的概率算法,在这里加上自己的理解分享下: 上次刚看同学发的朋友圈说道:“两个人同一间宿舍,而且同年同月同日生,这个缘分真的是醉了”,当时我也是醉醉的,看了这个算法后才发现,屋里有23个人,那么就可以50%的概率生日是一样的. 是这样子证明的: 首先,假设屋子里有K个人,分别对他们编号1,2,3….k号.不考虑闰年的情况,那么一年就有n=365天,首先还是要假设生日是均匀分布在一年的n天中(喜欢在春天生就都在春天生这就不均匀了),然后还要假设两个人生日相互独立(什么双

中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的. * 这样 筛选到最终,总

概率算法 蒙特卡罗算法

/***Date:2014.12.11***/ //概率算法思想:统计学思路. //基本过程:1)将问题转化为应的容易计算面积的几何图形S,问题结果对应几何图形中的某一部分S1: ////////////2)向几何图形中随机撒点: ////////////3)统计几何图形S.S1中的点数,根据二者面积关系以及二者中的点数来计算得到结果: ////////////4)判断结果是否达到需要精度结果,若符合则输出,否则继续(2)步骤. //蒙特卡罗(Monte Carlo)算法 //均匀撒点:利用随机

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 <!--?

关于概率算法的问题,不知道逻辑错在哪里,求debug

做个骰子成功几率的分析,投n颗骰子,第一次投成功的几率是a,然后投成功的骰子,需要再投1次,这次成功的几率是b.第二次成功的骰子才算最终成功. 要分析出n颗骰子,最终成功0到n颗的概率. 我写了个算法,求出的结果,合计0到n颗的概率不近似1,而且差别很大,求教各位大大算法有什么错误. 我算法的基本思路: 先统计出第一次投成功0-n颗骰子的概率列表.这步我自认没有问题,合计验算结果近似1 for (var i = 0; i <= n; i++){ FirstSuccessRateTbl.Add(i

适用于抽奖程序 随机广告的PHP概率算法实例

做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度.同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad.iphone5,小的中个Q币什么的 那么我们在程序里必然会设计到算法,即按照一定的概率让用户获得奖品.先来看两个概率算法函数. 算法一 代码如下: /** * 全概率计算 * * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4) * @return string

php抽奖概率算法

$arr=array(    5=>'奖项一',    10=>'奖项二',    60=>'奖项三',    25=>'奖项四'); $pool=array(); foreach($arr as $k=>$v){ echo count($pool).'<br>'; $pool+=array_fill(count($pool),$k,$v); }echo '<pre>';print_r($pool);echo $pool[rand(0,99)]; ph

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

#---抽奖算法需要满足的需求如下: 1 #---抽奖核心流程 1 #---问题???更好的算法 2 #---实际使用的扩展抽奖算法(带奖品送完判断和每用户最大中奖判断) 2 #-------网上的抽奖算法Php 3 #----java版本的.. 4 参考 5 #---抽奖算法需要满足的需求如下: 1.可以控制中奖的概率 2.具有随机性 3.最好可以控制奖品的数量 4.根据用户ID或者ip.手机号.QQ号等条件限制抽奖次数 初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面