别人在抢红包,程序员在的研究红包算法.docxVIP

别人在抢红包,程序员在的研究红包算法.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
别人在抢红包,程序员在的研究红包算法

别人在抢红包,程序员在研究红包算法 微信红包在羊年春节的火爆程度不言而喻,广告主投入5亿现金红包,与央视羊年春晚独家合作起到了巨大的推动作用。这就像一针大补丸,在短时间内给微信带来了极大的关注度与流量。除夕全天微信用户红包总发送量达到10.1亿次,摇一摇互动量达到110亿次,红包峰值发送量为8.1亿次/分钟。 抛开微信红包的市场价值不谈,红包本身的算法也引发了热议,由于官方没有给出明确的说法,各家也是众说纷纭,小编下面也为大家带来几种分析。 首先看看数据分析帝 大多数人都做出自己的猜测,这也是在不知道内部随机算法的时候的唯一选择,但是大多数人没有给出自己亲自的调查结果。这里给出一份100样本的调查抽样样本数据,并提出自己的猜测。 1. 钱包钱数满足截尾正态随机数分布。大致为在截尾正态分布中取随机数,并用其求和数除以总价值,获得修正因子,再用修正因子乘上所有的随机数,得到红包价值。 这种分布意味着:低于平均值的红包多,但是离平均值不远;高于平均值的红包少,但是远大于平均值的红包偏多。 图1. 钱包价值与其频率分布直方图及其正态拟合 但看分布直方图并不能推出它符合正态分布,但是考虑到程序的简洁性和随机数的合理性,这是最合乎情理的一种猜测。 越是后面的钱包,价值普遍更高 图2. 钱包序列数与其价值关系曲线 从图2中的线性拟合红线可以看到,钱包价值的总体变化趋势是在慢慢增大,其变化范围大约是一个绿色虚线上下界划出的“通道”。(曲线可以被围在这么一个正合乎常规的“通道”中,也从侧面反映了规律1的合理性,说明了并不是均匀分布的随机数) 从另一个平均数的图中也可以看出这一规律。 图3. 平均数随序列数的变化曲线 在样本中,1000价值的钱包被分成100份,均值为10。然而在图3中我们可以看到在最后一个钱包之前,平均数一直低于10,这就说明了一开始的钱包价值偏低,一直被后期的钱包价值拉着往上走,后期的钱包价值更高。 3. 当然平均数的图还可以透露出另一个规律,那就是最后的那一个人往往容易走运抽得比较多。因为最后那一个人是钱包剩下多少就拿多少的,而之前所有人的平均数 都低于10,所以至少保证了最后一个人会高于平均值。在本样本中,98号钱包抽到35,而最后一份钱包抽到46。 综上,根据样本猜测: 1. 抽到的钱大多数时候跟别人一样少,但一旦一多,就容易多很多。 2. 越是抽后面的钱包,钱越容易多。 3. 最后一个人往往容易撞大运。 点评:这种明显很实际有差异,小编每次不管什么时候抢都是几毛钱。 第二位同学写了一个简单python 代码 据观察,红包分钱满足以下几点: 1.不会有人拿不到钱 2.不会提前分完 3.钱的波动范围很大 红包在一开始创建的时候,分配方案就订好了。抢红包的时候,不过是挨个pop up而已。 因此 python 代码如下: def?weixin_divide_hongbao(money,?n):? divide_table?=?[random.randint(1,?10000)?for?x?in?xrange(0,?n)]? sum_?=?sum(divide_table)? return?[x*money/sum_?for?x?in?divide_table]? 不过上述算法还有两个小问题: 1.浮点数精度问题 2.边界值的处理 第三位同学按照网上流传的python写了一个java的版本 int?j=1;? while(j1000)? {? int?number=10;? float?total=100;? float?money;? double?min=0.01;? double?max;? int?i=1;? ? List?math=new?ArrayList();? while(inumber)? {? ? max?=?total-?min*(number-?i);? int?k?=?(int)((number-i)/2);? if?(number?-i?=?2)? {k?=?number?-i;}? max?=?max/k;? money=(int)(min*100+Math.random()*(max*100-min*100+1));? money=(float)money/100;? total=total-money;? math.add(money);? System.out.println(第+i+个人拿到+money+剩下+total);? i++;? if(i==number)? {? math.add(total);? System.out.println(第+i+个人拿到+total+剩下0);? }? }? ? System.out.println(本轮发红包中第+(math.indexOf

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档