测试一: 以下内容来源于QCon某高可用架构群聊天记录整理背景:有某个朋友咨询微信红包的架构,在官方或非官方同学的解释和讨论中得出以下讨论内容,在此期间有多个同学发红包做现网算法测试。 抢红包过程 当有人在群里发了一个N人的红包,总金额M元,后台大概发生的事情如下: 一、发红包后台操作:
二、抢红包后台操作:
FAQ
测试二:知乎用户“马景铖”的实验: 这里给出一份100样本的调查抽样样本数据,并提出自己的猜测。 1. 钱包钱数满足截尾正态随机数分布。大致为在截尾正态分布中取随机数,并用其求和数除以总价值,获得修正因子,再用修正因子乘上所有的随机数,得到红包价值。 这种分布意味着:低于平均值的红包多,但是离平均值不远;高于平均值的红包少,但是远大于平均值的红包偏多。 图1. 钱包价值与其频率分布直方图及其正态拟合 但看分布直方图并不能推出它符合正态分布,但是考虑到程序的简洁性和随机数的合理性,这是最合乎情理的一种猜测。 2. 越是后面的钱包,价值普遍更高 图2. 钱包序列数与其价值关系曲线 从图2中的线性拟合红线可以看到,钱包价值的总体变化趋势是在慢慢增大,其变化范围大约是一个绿色虚线上下界划出的“通道”。(曲线可以被围在这么一个正合乎常规的“通道”中,也从侧面反映了规律1的合理性,说明了并不是均匀分布的随机数) 从另一个平均数的图中也可以看出这一规律。 图3. 平均数随序列数的变化曲线 在样本中,1000价值的钱包被分成100份,均值为10。然而在图3中我们可以看到在最后一个钱包之前,平均数一直低于10,这就说明了一开始的钱包价值偏低,一直被后期的钱包价值拉着往上走,后期的钱包价值更高。 3. 当然平均数的图还可以透露出另一个规律,那就是最后的那一个人往往容易走运抽得比较多。因为最后那一个人是钱包剩下多少就拿多少的,而之前所有人的平均数都低于10,所以至少保证了最后一个人会高于平均值。在本样本中,98号钱包抽到35,而最后一份钱包抽到46。 综上,根据样本猜测: 1. 抽到的钱大多数时候跟别人一样少,但一旦一多,就容易多很多。 2. 越是抽后面的钱包,钱越容易多。 3. 最后一个人往往容易撞大运。 本文转载自微信公众号:数据与算法之美 关注微信公众号:PHP技术大全 PHPer升级为大神并不难! 本文转载于微信公众号: PHP技术大全(phpgod),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|