红包抽奖算法

最近项目要做一个红包抽奖,到抽奖算法的时候纠结了~


在网上找了一个http://blog.csdn.net/hengyunabc/article/details/19177877/

其中把他67和82的地方放开,效果还不错(他为什么注释掉我也不清楚)


然后考虑,希望实现正态分布的效果

又找到了这个方法

 Math.sqrt(b)*random.nextGaussian()+a; 
参考自:http://blog.sina.com.cn/s/blog_8eee7fb60101rqvd.html


但是方差的选择很难,要么就是方差过小,分布都集中在平均值上,要么就是方差过大,过滤掉太多不用的数据,造成分布效果不如意。


后来又找到一个

public double Norm_rand(double miu, double sigma2){
  double N = 12;
  double x=0,temp=N;
  do{
   x=0;
   for(int i=0;i<N;i++)
    x=x+(Math.random());
   x=(x-temp/2)/(Math.sqrt(temp/12));
   x=miu+x*Math.sqrt(sigma2);
   }while(x<=0);          //在此我把小于0的数排除掉了
   return x;
 }

N 代表总份数,miu 代表 均值 sigma2标准差
参考自:http://blog.sina.com.cn/s/blog_4cbb6b0c0100080a.html


不过当你希望你的最大值和最小值是可变的时候这个方法就不太好了。



几个方法各有缺点,我个人最后选择了第一种


在此做个记录,以后再考虑吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值