微信抢红包究竟有什么学问呢,为什么有的人只能抢到几分钱,有的人却可以抢到很大的金额呢?为什么有的人经常是手气最佳,有的人却很少拿手气最佳呢?

本文将揭晓微信红包背后的秘密。

【原理篇】

规律分析

微信红包金额是如何计算出来的?有规律可循吗?对于这个问题有无数“大神”们都进行过推测和测试,知乎上也有很多大v甚至给出了红包的分配算法。大致如下:

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

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

注意:这里的算法是每被抢一个后,剩下的会再次执行上面的这样的算法(Tim老师也觉得上述算法太复杂,不知基于什么样的考虑)。

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

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

2.拍脑袋算法,也就是纯粹的随机运算。随机算法实现代码如下:

public static double getRandomMoney(LeftMoneyPackage _leftMoneyPackage) {

// remainSize 剩余的红包数量

// remainMoney 剩余的钱

if (_leftMoneyPackage.remainSize == 1) {

_leftMoneyPackage.remainSize--;

return (double) Math.round(_leftMoneyPackage.remainMoney * 100) / 100;

}

Random r = new Random();

double min = 0.01; //

double max = _leftMoneyPackage.remainMoney / _leftMoneyPackage.remainSize * 2;

double money = r.nextDouble() * max;

money = money <= min ? 0.01: money;

money = Math.floor(money * 100) / 100;

_leftMoneyPackage.remainSize--;

_leftMoneyPackage.remainMoney -= money;

return money;

}

这样的运算结果虽然会出现两个最佳,但是手气最佳只有一个,先抢到的那个最佳。

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

规律测试

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

为了说明这一点,甚至有人制造了一个蒙特卡洛发生器,用来模拟用户拆红包的行为。具体过程这里不再赘述,本文只给出实验结论如下:

1)红包大小服从截尾正态分布,其好处是减少抽取红包大小分布的方差,让更多的人抽取的红包在均值附近,同时仍给一小部分人抽取大红包的机会,总体来说增加了红包抽取人的积极性和游戏的公平性;

2)抽取红包大小与抽取红包先后无相关性。一种可能的红包产生机制是:当发红包者<准备红包>的时候,程序自动依照截尾分布产生了相应大小,相应个数的红包,然后随机发给抽取红包的人。同样,这样的一个随机过程有助于增加游戏的公平性,也减少了红包抽取人投机操作(亦即譬如故意等钱包半空的时候再抽取)的动机。我在知乎上看到一位朋友谈到她的腾讯工作的朋友确认了红包产生是在<准备红包>时就完成了的,因此也在一定程度上增强了我的这种推测的可信度。

3)微信红包分配金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。

采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低。

这也就是为什么很多时候明明抢到红包可点开后发现没有的原因了。

微信红包的数据和背后的意义(深度剖析微信红包)(1)

最有参考价值的结论:

1.先抢后抢拿到红包的大小的期望是大致相等的,所以还是先下手抢吧。

2.后抢的人方差大(依赖前面人抢的多少),波动较大,有较大几率拿到“手气最佳”。2014年的红包一点开就知道金额,分两次操作,先抢到金额,然后再转账。2015年的红包的拆和抢是分离的,需要点两次,因此会出现抢到红包了,但点开后告知红包已经被领完的状况。进入到第一个页面不代表抢到,只表示当时红包还有。

【防骗篇】

1. “红包接龙”群骗局,让很多微友乐此不疲,其实,那些玩法都是群主设置规则,本身就不公平,群主是稳赚不赔,赢了就撤的是小赢家,剩下的参与者都是输家。

2.“尾数抽头”骗局。这种玩法更是庄家稳赚,因为没有被领完的红包可以继续转发给其他人或群里,且微信不会有任何提示。所以请友友们理智参与,拒绝赌博谨防受骗。

3.红包外挂骗局。目前据小编了解,比较有效的红包插件只有自动抢红包插件,其功能也是比较简单的自动抢、熄屏抢、延时抢、自动回复等。这些插件都是免费的,有机会小编可以提供给大伙。

另外还有一些号称尾数透视大小包控制的插件,需要收费的,小编可以告诉大家,都是骗人的。根据上面分析的红包金额分配原理,是不可能预先抓取到分配数据的。至少目前还没有能够控制微信红包数据的算法,所以千万不要相信那些兜售红包软件的,你这边付款,他那边立刻拉黑你。

微信红包的数据和背后的意义(深度剖析微信红包)(2)

【姿势篇】

1.接龙红包群,根据大量经验证明,往往是抢自己的容易最小,而且“手气最佳”经常出现在后面几个人。这样的话,我们玩红包群最小接龙的时候,可以刻意晚一点抢,这样可以最大程度避免最小,当然,晚一点抢也容易落空,但落空总比最小要好,起码不会赔,还可以继续抢。尤其是自己发红包时,最好晚一点抢。

2.谨慎使用外挂,避免微信账号被封。

3.微信红包是一种娱乐工具,亲朋好友一起玩一玩,增添一点节日气氛是可以的。但坚决抵制利用微信红包进行任何形式的赌博,开启健康微信新生活。

微信红包的数据和背后的意义(深度剖析微信红包)(3)

,