关于概率问题

因为最近项目有需求根据概率来随机出物品出来,上网查了下很多都是概率不能重复( 注:array('a'=>2, 'b'=>2) ),而且循环的时候随机,觉得这样做代码效率非常低下(虽然容易理解)

为了理解概率先来说个小例子:

$item = array('a'=>2, 'b'=>5, 'c'=>2, 'd'=>1);

数组里key是物品名称,value是概率。

这里的概率依次是 a(1,2), b(3,4,5,6,7), c(8,9), d(10)

看到上面的规律了么,好了,有了上面的规律代码如下:

$arr = array('a'=>2, 'b'=>5, 'c'=>2, 'd'=>1);
//概率为: a(1,2), b(3,4,5,6,7), c(8,9), d(10);

function randOdds(array $array)
{
  $odds = 0; $sum = array_sum($array); $rand = mt_rand(1, $sum); foreach ($array as $key => $value) { $odds += $value; if ($rand <= $odds) { return $key; } } }

 

 

posted @ 2013-02-27 22:07  tywei  阅读(99)  评论(0)    收藏  举报