很多人在抢红包的时候都会疑惑,是先下手为强好,还是后发制人好?咱们今天就来扒一扒背后的算法。 马上就要过年了,大家又要在这“抢红包大战”里热闹一把。虽说红包金额大小并不太重要,图个喜庆就行,可同样一个红包,拿出来的钱数差别往往还挺大。这种拼手气的红包到底有没有规律?先动手和后动手真的没区别吗? 以前抢红包用的是最简单粗暴的全凭运气的分配法,总金额固定,人数确定,系统随便扔钱。这在数学上叫“长期平均值”,又叫数学期望。打个比方,给你一根绳子闭眼剪一刀,大概率是从中间剪断。 举个例子,如果发个100元的红包给10个人。第一个人能抢到的钱从0.01元到100元都有可能,算下来平均能拿50元。要是第一个人只拿了10元,剩下90元分给后面的人,第二个人就只能在0.01到90元这个范围内抢了,期望值就降到了45元。 这么算下来,越是排在后面的人拿到的期望越少。这就是老算法的漏洞:前面的人占便宜,后面的人吃亏。 为了既保留随机性又让大家觉得公平,现在的算法用了个“二倍均值法”。就是给每个人设个上限:最少0.01元,最多不超过剩余金额平均值的两倍。 咱们还是拿100元分给10个人来说: 第一个人最多只能拿100÷10×2=20元(也就是0.01到20元之间),他的期望值就从50元降到了10元; 假如他运气差只拿了1元,剩下99元分给9个人,第二个人最多能拿99÷9×2=22元(也就是0.01到22元之间),期望值依然在11元左右; 就算他手气爆棚拿走了上限20元,剩下的80元分给9个人,第二个人的上限就是80÷9×2≈17.78元(也就是0.01到17.78元之间),期望值稳定在8.89元左右。 你看不管第一个人拿走多少钱,后面的人期望值总是围绕着剩余人均钱数打转。这样一来大家就都觉得没吃亏。 其实真正的算法要复杂得多,还要考虑最小金额限制和系统稳定性之类的细节问题。但无论怎样,我们在乎的是那份抢红包的热闹和拆开红包时的喜悦。