写在开头
每逢过年过节,你的家族群、公司群是不是总有那么一个“手气王”,每次都能抢到几十块?

而你,盯着屏幕戳断了手指,最后弹出一个刺眼的“0.01
元”。
这时候,你可能会安慰自己:“没事,运气守恒定律,下次就多了。
”
或者你会暗搓搓地想:“是不是马化腾看我充钱少,专门针对我杀熟?”
别闹了。
在代码的世界里,没有杀熟,只有冷冰冰的“随机分布”和“博弈论”。
今天,Fox
0.01
你的钱是怎么被“切”的?
假设老板在群里甩了
100
个人抢,后台系统该怎么切这块蛋糕?
很多人第一反应是:“简单啊,每个人跑个随机数Random(0,
100)不就行了?”
绝对不行!
如果第一个人运气爆棚随机到了
块,后面
块钱?那群里当场就能打起来。
微信用的是一套经典的“二倍均值法”。
这个算法听起来很高大上,其实说人话就是:每次抢到的金额,是在0.01到剩余人均金额
2之间随机。
公式摆在这:
剩余金额剩余人数
为什么要乘
2?
为了让每个人“理论上”拿到钱的概率是公平的。
100
人,人均
元。
第
个人抢:范围是
(0.01,20)。
在这个范围里瞎蒙,平均下来的期望值是10
元。
假设第
元。
第
元分给
21.76)。
平均期望是10.88
元。
结论:
你看,算法其实挺“圣母”的。
无论你第几个来,它都尽力想让你拿到
既然公平,为什么受伤的总是我?
面试官最爱问这个:“既然大家抢到的期望值都一样,那我是不是随便第几个抢都行?”
这里有个坑:期望公平
0.01
的罪魁祸首,不是平均值,而是波动性(方差)。
1.
第一个人的“过山车”
如果你是第一个冲上去抢的,你的随机范围是[0.01,
20]。
这就像创业:
上限极高:你有机会直接抢到
19.99,瞬间封神。
下限极低:你也有极大概率直接触底
0.01。
风险:拉满。
2.
个人抢剩多少,你就拿多少。
根据大数定律,前面
个人大概率已经把大起大落都试完了(有人多拿,有人少拿,互相抵消了)。
所以最后一个人拿到的通常都是“平均数”附近的钱,稳得一匹,但也毫无惊喜。
3.0.01的真相
所以,为什么你老是抢到
0.01?
情况
A(大概率):你手太快了。
你总是冲在最前面,在这个“高风险区间”里,不幸撞上了下限。
情况
B(小概率):你手太慢了。
前面的“赌徒”运气太好,把池子里的钱吸干了,留给后面几个人的均值已经变成了
最佳策略:我们能卡
吗?
既然算法已经明牌了,咱们聊聊怎么操作才能收益最大化。
策略
A:赌徒模式(头铁流)
操作:看到红包立刻点!第一个抢!
收益:你拥有了成为“手气最佳”的最高概率。
代价:你也拥有了拿
0.01
的最高概率。
适合人群:爱发朋友圈炫耀的“显眼包”,或者今天觉得自己脸特别白的人。
策略
B:苟且模式(捡漏流)
操作:看到红包别急,心里默数
秒,等中间再抢。
收益:极端的大红包和极端的
0.01
通常已经被前面的人“排雷”排掉了。
这时候池子里的均值比较稳定,你能稳稳拿到一个“比上不足,比下有余”的金额。
适合人群:程序员、财务、求稳的老实人。
如果微信改成了“预先生成所有金额,再乱序洗牌”的模式,那上述策略全部失效,纯看命。
四、
为什么不直接每人发
块?
这不仅仅是技术问题,更是人性问题。
如果微信红包改成“每人均分”,哪怕每个人都拿
块,这个功能第二天就凉了。
为什么?因为“没劲”。
产品经理故意保留了0.01和手气最佳的巨大贫富差距,就是为了拿捏你的两个弱点:
赌徒心理:“这把输了(0.01),下一把我就能翻盘。
”
幸存者偏差:你只看到了别人抢了
0.01。
正是这种“随机的不确定性”,让抢红包变成了一种社交游戏,而不是简单的转账工具。
Fox
写在最后
看完这篇文章,下次再抢到
0.01,别怪自己手气差。
这只是因为:你参与了一场“高方差”的数学游戏,而你刚好落在了正态分布的最左边。
但这只是“数学”层面的博弈。
真正的挑战在“工程”层面:
如果除夕夜
TPS
洪峰打过来:
怎么保证系统不雪崩?(2015年微信就崩过,后来是怎么改的?)
一组数据库挂了,怎么让它自己“爬”起来?(传说中的
故障自愈)
几百亿的历史订单,怎么存才最省钱?(冷热分离与
SET
化架构)
这背后不仅仅是
Redis
化故障隔离、无损平行扩容、订单异步化等殿堂级架构设计。
https://mp.weixin.qq.com/s/ZQfOZ_kl8Zv2V7RDegLBew


