龙空技术网

关于微信运气王红包分配机制的假设实验

星期八的生活耶 686

前言:

目前咱们对“100的3个点怎么算法”大致比较着重,我们都想要剖析一些“100的3个点怎么算法”的相关内容。那么小编在网络上网罗了一些对于“100的3个点怎么算法””的相关知识,希望同学们能喜欢,朋友们一起来了解一下吧!

过年期间,要问什么事是全国人民都乐此不疲的参与了进来的呢?想必抢微信红包莫属,那么,微信抢红包究竟有什么学问呢,为什么有的人只能抢到几分钱,有的人却可以抢到很大的金额呢?为什么有的人经常是手气最佳,有的人却很少拿手气最佳呢?

本文,就将揭晓这些事情的答案~

首先,我们来科普一下红包的算法:

以下内容摘自《微信红包的架构设计简介》(节选)整理 by朱玉华

分配:红包里的金额怎么算?为什么出现各个红包金额相差很大?

答:随机,额度在0.01和剩余平均值×2之间。例如:发100块钱,总共10个红包,那么平均值是10块钱一个,那么发出来的红包的额度在0.01元~20元之间波动。

当前面3个红包总共被领了40块钱时,剩下60块钱,总共7个红包,那么这7个红包的额度在:0.01~(60/7×2)=17.14之间。

注意:这里的算法是每被抢一个后,剩下的会再次执行上面的这样的算法

这样算下去,会超过最开始的全部金额,因此到了最后面如果不够这么算,那么会采取如下算法:保证剩余用户能拿到最低1分钱即可。

如果前面的人手气不好,那么后面的余额越多,红包额度也就越多,因此实际概率一样的。

拍脑袋算法,会不会出现两个最佳?

答:会出现金额一样的,但是手气最佳只有一个,先抢到的那个最佳。

我们只要知道以上内容便足够理解微信红包是如何计算出来的了,那么接下来的问题是,为什么有的人抢的金额很大,有的人抢的金额很小呢?抢红包获取的金额和抢红包的顺序有什么关系呢?每个人获取红包金额的可能性是相同的吗?第几个抢红包的人最容易手气最佳呢?

首先,通过模拟实验可以知道,这个游戏是公平的,在红包拆开之前,每个人,无论先后顺序,抢到的红包金额的数学期望都是一样的,如果100元分成5个红包,那么每个人抢到的金额的数学期望就是20元,但有趣的是,虽然数学期望一样,但概率密度却有很大差别。

为了说明这一点,我制造了一个蒙特卡洛发生器,用来模拟用户拆红包的行为。

我先从3个特例入手。

1.将100元红包分成3个,拼手气抢红包,实验了100万次。

将第一个抢到红包的人所抢到的金额绘制在频数分布直方图上,结果如图:

可以发现,模拟的结果符合理论算法,即在0.01到33.33×2之间均匀分布。

前方高能……

可是,第二个拆红包的人和第三个拆红包的人却不是这样,他们的频数直方图长成这个样子,

第二个人的:

第三个人的:

首先,他们并不是均匀分布,看起来是偏态分布(左偏),拖出了长长的右尾,可以看出,他们有获得更高金额红包的机会,理论上最大可得到99.98元。天,100元的红包拿99.98,这基尼系数要上天啊~

其次,从肉眼来看,他们的频数直方图看起来好像一样,不知道能否证明出来,不过我是不在意的,信蒙特卡洛发生器是一个简单粗暴但很有效的手段。我姑且作出假设,即最后两个人抢红包得到的金额的概率分布是相同的。

那谁最有可能成为手气最佳呢?

答案是:第一个抢红包的人。

还是这100W次实验,我记录了手气最佳的人,并画成频数分布直方图,图片如下:

你看,第一个人成为手气最佳的次数最多,或者说第一个抢红包的人成为手气最佳的概率最大。最后两个人成为手气最佳的次数相差无几。当然,我能想到的部分原因是如果抢到的金额相同,那么先抢到的人为手气最佳。

接下来,我们增加红包的个数。

2. .将100元红包分成4个,拼手气抢红包,实验了100万次。

结果显示如下:

第一个人:

第二个人:

第三个人:

第四个人:

手气最佳的情况:

看,和前面的观察到的现象一致吧~

接下来实验拆成5个包,还是100元,实验100W次。

第一个人的:

第二个人的:

第三个人的:

第四个人的:

第五个人的:

手气最佳情况:

通过3次模拟,我们可以针对微信红包作出以下假设或推论:

第一:第一个抢到红包的人抢到的金额是均匀分布。

第二:越晚抢到红包的人,抢到的金额分布越拖出长长的右尾,即抢到金额的上限越来越大。并且,只有最后两个抢红包的人,才有可能抢到非常大的金额。非常大是指几乎接近红包全部金额。

第三:越早抢红包,越容易手气最佳,越晚抢红包,越不容易手气最佳,最后抢红包的两个人最不容易成为手气最佳,但这带来的差异并不是很大。

第四:不管先后抢红包的顺序,抢到金额的数学期望都是相同的。

当然,如果手足够慢,红包都就被别人抢完咯~

记住这几个假设, 你就比其他抢红包的人的姿势水平高一个等级喔~

知道该怎么玩红包游戏了么~哈哈~

不过,我还没证明这些假设诶~信蒙特卡洛模拟好啦~

标签: #100的3个点怎么算法