游戏抽奖,100发保底,中奖的概率计算公式是1%,如果100发没有中可以必得奖品,求出正态分布图

任5选10个号。250元奖金500,只要排除一个数就行了

基础的游戏抽獎算法通常要求实现在指定奖品的集合中每个奖品根据对对应概率计算公式进行抽取。个人了解的主要有以下几中抽奖算法:


这种算法思想最为简单将n个奖品编号0~n-1,其中各类奖品的概率计算公式通过其数量体现最后程序产生0~n-1之间的随机数便是抽中的奖品编号。例如:
苹果手机概率计算公式1%网站会员20%,折扣券20%很遗憾59%。这样编号0是苹果手机,1~20是会员21~40是折扣券,41~100是 很遗憾產生的随机数落在那个区间,就代表那个奖品被抽中

    概率计算公式通过数量来体现在各个奖品概率计算公式较大的情况下,总數n可以较小但如果在精度很高的情况下,总数必须按比例成倍扩大
    例如,所有奖品概率计算公式都是10%那么n只需要取10就可以。但是如果某个奖品概率计算公式是0.01%按照这种算法,总数要扩大到100*100 在Java中,Math.random()方法本身基本可以保证大量测试的情况下避免高重复且概率计算公式分布比较平均。但是需要注意的是该方法默认返回0-1之间的数据。
    在当前算法中必须扩大指定倍数并且强制使用int进行类型转换。在这樣的扩大和转换过程中必然会对数据精度进行修改,转换后的数据也不能保证概率计算公式分布平均
    因此,该算法实际可能达不到预期的概率计算公式要求 数据准备阶段,为每个奖品确定编号与奖品信息的关系集合需要O(n);
    产生随机数阶段并转换O(1);
    从集合中查找,不同的數据结构实现不同最差需要O(n);

(高中数学里几何概形的思想)
将奖品集合的概率计算公式划分区段放入数组中。概率计算公式区段通过该概率计算公式累计相加确定利用随机数产生随机概率计算公式,加入数组并排序该数据的下标,就是对应奖品集合中獎品的索引例如,奖品的集合有X1,X2,X3,X4对应概率计算公式为P1=0.2,P2=0.2,P3=0.3,P4=0.3。
那么产生的概率计算公式区段数组为[0.2,0.40.7,1.0]
这样,如果产生一个随机概率計算公式为0.5加入数组排序后,0.4~0.7之间是X3相加所在的概率计算公式区间,返回index=2
由于区间分布的确定是按照X集合顺序的,所以该索引也正昰X3在原集合中的索引

  1. 利用几何概形,概率计算公式数组分布在0到1之间不再需要扩大倍数和取整操作,基本可以保证概率计算公式岼均分布避免大量重复的情况
  2. 概率计算公式分配的排序过程,可以使用java默认的排序工具类也可以自己实现。保证时间复杂度最小
  3. 准備阶段,O(m)m远小于n,因为概率计算公式只有几个不会大量膨胀。
    排序取下标根据排序算法,O(logn)即可实现
    取值根据下标,O(1);

这种算法对数学要求比较高没有仔细研究。
感兴趣的小伙伴可以自己研究一下和我分享


* 奖品集合 + 概率计算公式比例集合 * 将奖品按集合Φ顺序概率计算公式计算成所占比例区间放入比例集合。并产生一个随机数加入其中排序。</br> * 排序后随机数落在哪个区间,就表示那個区间的奖品被抽中</br> * 返回的随机数在集合中的索引,该索引就是奖品集合中的索引</br> * 比例区间的计算通过概率计算公式相加获得。

我要回帖

更多关于 概率计算公式 的文章

 

随机推荐