马上又快到年底了,又该有抽奖活动吸引用户了,最近leader分配了个小任务,就是做个抽奖活动的页面,这里整理下概率的控制. 例子: 假设有6种奖品,1种空奖,这里1-6分别代表6种奖励,0代表空奖.各种奖励结果的概率要求控制不一样,那应该怎么办呢,首先我第一反应想到的就是下面的办法。
/** 抽奖池 */
$poolArr = array();
$poolArr = array_merge($poolArr, array_fill(0, 27, 1)); //第一种奖品出现概率27%
$poolArr = array_merge($poolArr, array_fill(0, 15, 2); //第二种奖品出现概率15%
$poolArr = array_merge($poolArr, array_fill(0, 15, 3); //第三种奖品出现概率15%
$poolArr = array_merge($poolArr, array_fill(0, 18, 4));//第四种奖品出现概率18%
$poolArr = array_merge($poolArr, array_fill(0, 18, 5));//第五种奖品出现概率33%
$poolArr = array_merge($poolArr, array_fill(0, 18, 6));//第五种奖品出现概率6%
$poolArr = array_merge($poolArr, array_fill(0, 18, 0));//空奖出现概率4%
$randKey= array_rand($poolArr);
$reward = $poolArr[$randKey];
ok,这种方案很简单,反应总概率100%,那种概率n%,那我放n个这种就是了,总数量为100, 随机抽取一个奖励的概率就是n%
这种肯定是能符合要求的,但是这种方案是不是太low了,有没有更好的呢,我得再想想................... 接下来网上翻了翻,搜集了下
方案1: 把1按照区间划分,然后随机0-1之间的某个数,随机到某个区间,就是某项奖品,好吧,这个其实跟上面的想法类似
方案2: 如果奖品的数量有限制,而且抽奖的人数很多,为了避免很快就被抢光,可以按照时间释放奖品,再用概率空置这个奖品的中奖概率