除夕夜,11点59分。
你盯着手机屏幕,大拇指悬在半空。家族群里,二姨发了一句"来啦来啦",紧接着——
一个红包弹了出来。你的手指以百米冲刺的速度点下去。0.3秒,打开。
0.32元。你看了眼排行榜,表弟抢到了8.66元,还带着一行金灿灿的大字——"手气最佳"。
你叹了口气,发了个"谢谢老板"的表情包,心里却在想:
凭什么每次手气最佳都不是我?别急。今天我们就来扒一扒微信红包背后的数学,看看那个"手气最佳"到底是怎么诞生的。放心,不需要你会微积分,能抢红包就能看懂。
---
先说最关键的问题:你在群里发一个100元的红包,分给10个人——微信是怎么决定每个人分多少的?
很多人以为微信是一次性把100元切成10份,像切蛋糕一样。
不是的。微信用的算法叫「二倍均值法」。名字听起来很唬人,其实原理特别简单。我打个比方你就懂了:
用数学语言说就是:每次抽奖的范围是 [0.01元, 剩余金额 ÷ 剩余人数 × 2]。
这个算法有几个非常巧妙的设计:
第一,保证每个人至少能拿到0.01元。 你不会打开红包发现里面是0——那也太扫兴了。 第二,保证不会提前把钱分完。 因为每次最多只能拿走"平均值的两倍",所以后面的人一定有钱可分。 第三,计算速度极快。 每个人领红包的时候实时算一次就行,不需要提前把所有金额都算好存起来。这一点在除夕夜每秒几十万个红包的场景下,至关重要。---
这是大家最好奇的问题。你可能也有这种感觉:手气最佳经常出现在最后抢的人身上。
这不是错觉,这是数学。
先说一个可能让你意外的结论:不管你是第几个抢,你的「期望金额」其实是一样的。
"那为什么最后一个人经常是手气最佳?"
关键在于方差。
什么是方差?简单说就是"结果的波动有多大"。
在微信红包里,越早抢的人,波动越小;越晚抢的人,波动越大。
为什么呢?回到我们的"糖果碗":
第一个人面前有100颗糖,10个人分,他只能从1到20之间抽。波动范围是0到20。
但最后一个人呢?他拿到的是"碗里剩下的全部"。如果前面9个人运气都很好抽得多,碗里可能就剩几颗;如果前面的人都很克制,碗里可能剩下三四十颗。
最后一个人的金额,是前面所有人随机性的叠加。这意味着什么?
最后一个人更可能拿到特别多,也更可能拿到特别少。而"手气最佳"看的是谁拿得最多。在一群波动小的人里,唯一一个波动大的人,天然就更容易出现极端值——也就更容易成为手气最佳。
用一个更直观的比喻:
所以下次抢红包,如果你不急,等别人先抢完——你拿到手气最佳的概率确实会稍微高一点。
但别高兴太早,你拿到"手气最差"的概率也更高了。
高风险,高回报。数学是公平的。---
如果你在群里发100元红包分10个人,然后重复这个实验一万次,把每个位置的金额画成图表,你会看到一些有趣的规律:
第一个抢的人: 金额集中在0到20元之间,分布比较均匀,平均大约10元。形状接近一条平缓的曲线。 中间位置的人: 金额分布开始变得不那么均匀,出现了一点"偏态"——小金额出现的概率略高于大金额。 最后一个抢的人: 金额分布范围最广,从接近0到可能超过30元都有。曲线呈现明显的"右偏"——大多数时候拿到的是中小金额,但偶尔会出现一个让人惊喜的大数字。用数据来说话:
| 位置 | 平均金额 | 最低可能 | 最高可能 | 波动程度 |
|:---:|:---:|:---:|:---:|:---:|
| 第1个 | ≈10元 | 0.01元 | 20元 | 较小 |
| 第5个 | ≈10元 | 0.01元 | ≈25元 | 中等 |
| 第10个 | ≈10元 | 0.01元 | ≈30元+ | 最大 |
平均值都一样,但命运的方差截然不同。这其实很像人生——有人选择稳定的工作,旱涝保收;有人选择创业,可能大富也可能血亏。期望收入也许差不多,但波动完全不同。
不过红包嘛,不用想那么深。开心就好。🧧
---
每年春节,朋友圈都流传各种"抢红包攻略":
从算法上看,微信红包的金额是在你点击「领取」的那一刻实时计算的。你抢得快还是抢得慢,跟你能拿到多少钱完全无关。
唯一有微小影响的是你的顺序位置:
但这个差异非常非常小,小到在实际体验中几乎感受不到。
所以最佳策略就是:别想那么多,看到红包就抢,抢到多少都开心。毕竟红包的意义不在那几块钱,在于那个"叮"的一声响,在于群里"谢谢老板"刷屏的热闹劲儿,在于一家人虽然天各一方,但在同一秒钟盯着同一个手机屏幕时的那种连接感。
---
你可能没想过,你随手点的那个红包,背后是一场工程奇迹。
2015年除夕,微信红包的收发总量达到10.1亿次,峰值每秒钟要处理数十万个红包。到了2019年,这个数字飙升到823.8亿次。
这是什么概念?
但微信的工程师们不能辞职。他们必须让这个系统在除夕夜那几个小时里完美运转。
这背后有几个关键的技术挑战:
挑战一:钱不能算错。红包涉及真金白银。100元分10个人,最后加起来必须刚好是100元,不多不少。在每秒处理几十万笔交易的情况下做到这一点,对数据一致性的要求极高。
挑战二:不能"超发"。一个红包10个人抢,绝对不能出现第11个人也抢到了的情况。在高并发场景下,这种"超卖"问题是分布式系统的经典噩梦。
挑战三:用户体验不能卡。你点开红包,如果转3秒钟的圈才显示金额,你的体验就毁了。微信要求红包的打开时间在毫秒级别。
微信团队为此做了大量的架构优化。据公开的技术分享,他们采用了基于内存的高速存储系统来处理红包数据,通过分布式锁和队列机制保证不会超发,并且用了多层缓存来加速读取。
每年除夕,微信的技术团队都要提前几个月做压力测试和容量规划。对他们来说,除夕夜不是放假——是一年中最紧张的"大考"。
你轻轻一点,工程师重重一跳。 这大概就是技术的浪漫吧。---
微信红包从2014年上线至今,已经走过了12年。来看看一些有意思的数据:
从1600万到823亿——12年间增长了5000多倍。
还有一些有趣的细节:
---
| 项目 | 数据 |
|:---|:---|
| 微信红包上线时间 | 2014年1月 |
| 使用的分配算法 | 二倍均值法 |
| 每个位置的期望金额 | 相同(总额÷人数) |
| 最容易出现手气最佳的位置 | 靠后位置(因为方差更大) |
| 2016年除夕峰值 | 每秒40.9万个红包 |
| 2019年除夕收发量 | 823.8亿次 |
| 红包金额上限 | 200元 |
| 红包金额下限 | 0.01元 |
| 未领取退回时间 | 24小时 |
---
说了这么多,你可能会问:"那我以后能不能靠数学当手气最佳?"
老实说,不能。
因为二倍均值法的精妙之处就在于——它对每个位置都是公平的。你可以选择早抢或者晚抢,但期望收入不会变。数学不会偏心。
但你知道吗?这恰恰是微信红包最聪明的设计。
如果算法有明显的"最佳策略",大家都会等到最后才抢,或者都在第一时间抢。那群里的抢红包就不热闹了——而热闹,才是红包真正的意义。
马年寓意万马奔腾、马到成功。
所以今年抢红包的时候,别纠结自己是第几个抢、能抢到多少钱了。
管它0.01还是188.88,点开红包那一秒,你就是全家最快乐的人。马年大吉,祝你每个红包都是——
🏆 手气最佳!---
*参考资料:*