【算法与生活】微信抢红包的猜想和原理

大年初一中午在群里和同学们抢红包。我突然发现有一位同学的获奖概率特别高。我一开始是在猜想人们的最佳手气会不会和这些人所发出的红包的大小有关系;第二个猜想,会不会和人们的抢夺的时间有关系。比如说,时间晚一点的开的几率大一些。

然后我整理了一下我的思路:
1.输入红包的大小和个数,应该是一个类似于循环/递归的模式,放出一个模型,利用栈/队列的模型输出。查阅过资料以后给出两个东西:1.大的数据验证: 截尾正态分布抢红包体系,2.来自知乎的一个采访过微信团队的简单思路代码: 微信的抢红包思路。(感谢这两位大神和许多CSDN的大神,参考了许多东西。)

Java代码不让粘贴,禁止转载,那就只能说说思路啦,想看代码的可以直接点击链接。

随便截了一张里面的图,在大数下确实是一个平均的数值。

我用自己的理解写一下:
    从代码中可以看出,明显是一个递归,而且可以确定的是,对于单次而言,第一个人有很大的概率拿不到最大的红包,后面的人有很大的概率可以拿到最大的红包,但是要注意的是一定是概率,不是确定的数值。 每个人可以得到的钱都在0.01~(剩余平均值*2)之间。然后再次递归数据,直到结束。这个地方可以理解的就是,如果说剩余的平均值越大,也就是前面的人的手气越不好,你能拿到的大的红包的概率会越大,因为你所在的范围大了,可以想象的空间也就大了。
后面还有一些小的问答也挺有趣的,第一次知道这些东西。

比如说,这个红包,将会是在每个人拆的时候点进去开始计算的,而不是直接已经分配好的,毕竟要是分配好的话还需要特地再去开一个内存空间。
再比如说:还有是和我的猜想不一致。红包不是栈/队列,仅仅是个计数器,只要算出来个数加一个达到上限停止就可以。

再次感慨微信的人真的是天才,或许是我太蠢了,根本想不到这些事情。


猜你喜欢

转载自blog.csdn.net/Bonstoppo/article/details/79330224