twinkle100
最近做了一个活动抽奖需求,项目需要控制预算,概率需要分布均匀,这样才能获得所需要的概率结果。 例如抽奖得到红包奖金,而每个奖金的分布都有一定概率:
现在的问题就是如何根据概率分配给用户一定数量的红包。
算法思路 :生成一个列表,分成几个区间,例如列表长度100,1-40是0.01-1元的区间,41-65是1-2元的区间等,然后随机从100取出一个数,看落在哪个区间,获得红包区间,最后用随机函数在这个红包区间内获得对应红包数。
时间复杂度 :预处理O(MN),随机数生成O(1),空间复杂度O(MN),其中N代表红包种类,M则由最低概率决定。
优缺点 :该方法优点是实现简单,构造完成之后生成随机类型的时间复杂度就是O(1),缺点是精度不够高,占用空间大,尤其是在类型很多的时候。
算法思路 :离散算法通过概率分布构造几个点[40, 65, 85, 95,100],构造的数组的值就是前面概率依次累加的概率之和。在生成1~100的随机数,看它落在哪个区间,比如50在[40,65]之间,就是类型2。在查找时,可以采用线性查找,或效率更高的二分查找。
算法复杂度 :比一般算法减少占用空间,还可以采用二分法找出R,这样,预处理O(N),随机数生成O(logN),空间复杂度O(N)。
优缺点 :比一般算法占用空间减少,空间复杂度O(N)。
算法思路 :Alias Method将每种概率当做一列,该算法最终的结果是要构造拼装出一个每一列合都为1的矩形,若每一列最后都要为1,那么要将所有元素都乘以5(概率类型的数量)。
此时会有概率大于1的和小于1的,接下来就是构造出某种算法用大于1的补足小于1的,使每种概率最后都为1,注意,这里要遵循一个限制:每列至多是两种概率的组合。
最终,我们得到了两个数组,一个是在下面原始的prob数组[0.75,0.25,0.5,0.25,1],另外就是在上面补充的Alias数组,其值代表填充的那一列的序号索引,(如果这一列上不需填充,那么就是NULL),[4,4,0,1,NULL]。当然,最终的结果可能不止一种,你也可能得到其他结果。
举例验证下,比如取第二列,让prob[1]的值与一个随机小数f比较,如果f小于prob[1],那么结果就是2-3元,否则就是Alias[1],即4。
我们可以来简单验证一下,比如随机到第二列的概率是0.2,得到第三列下半部分的概率为0.2 * 0.25,记得在第四列还有它的一部分,那里的概率为0.2 * (1-0.25),两者相加最终的结果还是0.2 * 0.25 + 0.2 * (1-0.25) = 0.2,符合原来第二列的概率per[1]。
算法复杂度 :预处理O(NlogN),随机数生成O(1),空间复杂度O(2N)。
优缺点 :这种算法初始化较复杂,但生成随机结果的时间复杂度为O(1),是一种性能非常好的算法。
我这里有一个粒子群的完整范例:function main()clc;clear all;close all;tic;
1、题目论文题目,主要以简洁为主,字数不需要太多,一般20个字以内为佳。并且论文题目对全文内容要有概括性。2、摘要摘要在撰写时,要明确、精练,大概100-200
半导体一般指矽晶体,它的导电性介于导体和绝缘体之间。 半导体是指导电能力介于金属和绝缘体之间的固体材料。按内部电子结构区分,半导体与绝缘体相似,它们所含的价电
通信工程可以写4g网络通信、无线局域网、wifi等等热门题目的。开始也不懂,还是学长给的文方网,写的《网络通信中的视频编码与传输技术研究》,非常靠谱的说无线传感
在概率论中,我们将发生概率很小(通常不超过5%)的事件称作小概率事件。在统计检验中的应用:假设检验的基本思想是应用小概率原理(小概率原理:指发生概率很小的随机事