0%

把拼手气红包变成拼手速红包

这篇文章来自于一个错误。在分析"拼手气红包"先后领取的金额分布的不同时,因为做出了错误的假设,使得推导出的先后领取红包的期望金额远远不同。这不符合实际“拼手气红包”的情况。但这意外地成了“拼手速红包”,最后还有蛮漂亮的数学结果,就还是记录了下来。( @毕导做过正确的分析,在文末有链接)(什么?你问我为什么放到文末?)

因为文中需要第三人称,所以就用了超级喜欢的《小绿与小蓝》的背景,OOC勿喷。毕竟小蓝在这里只是推进演绎的工具人(狗头)


快过年了。

看着走在身边的小蓝,我不禁想到:“小蓝,拼手气红包里的金额是怎么随机出来的?”

“当我们轮流抢红包的时候,每次可以看成是从剩余的钱中获得一定比例的钱,我们可以从这个比例所服从的概率分布入手。假设这个分布是均匀分布!”,小蓝说,“我算一下…”

在小蓝计算的时候,我们不妨先直观地分析一下,既然是拼手气红包,那影响钱数的应该只有运气。无论你是第几个抽到红包的,期望钱数都应该是一样的。现在让我们看看小蓝的草稿纸:


<小蓝的草稿纸>

对于第n个人,记其获得的钱数占红包总钱数的比例服从概率分布fn(x)f^n(x),期望为En(x)E^n(x);其获得红包后剩下的钱数占红包总钱数的比例服从概率分布gn(x)(x(0,1))g^n(x)(x\in(0,1))。对于第一个人,显然:

f1(x)=1,E1(x)=12,g1(x)=1f^1(x)=1, E^1(x)=\frac{1}{2}, g^1(x)=1


啊,从第一步就开始不对了呢…

按照均匀分布的假设,第一个人平均会获得一半的钱。的确均匀分布就该是这样。直觉地猜测下去,第二个人平均会获得122\frac{1}{2^2}的钱,第nn个人平均会获得12n\frac{1}{2^n}的钱…那这就变成拼手速红包了。看来获得的钱占剩余钱的比例肯定不能简单地假设服从均匀分布。

不过看看这个“拼手速红包”会有怎样的性质呢?


<小蓝的草稿纸>

下面建立gn(x)g^n(x)fn+1(x),gn+1(x)f^{n+1}(x),g^{n+1}(x)之间的关系:

对于fn+1(x)f^{n+1}(x),想要第n+1n+1个人能获得xx的钱,第n个人获得红包以后至少要剩t>xt>x的钱,概率密度为gn(t)g^n(t)。而第n+1n+1个人从剩余的钱tt中获得xx的概率密度是1t\frac{1}{t}(因为我们假设从剩余的钱中获得钱所占比例服从均匀分布)。对所有的t>xt>x累加,那么有:

fn+1(x)=x1gn(t)tdtf^{n+1}(x)=\int^1_x{\frac{g^n(t)}{t}dt}

对于gn+1(x)g^{n+1}(x),想要第n+1n+1个人取完后剩下xx的钱,第n个人获得红包以后同样至少要剩t>xt>x的钱,概率密度为gn(t)g^n(t)。而第n+1n+1个人从剩余的钱tt中获得(tx)(t-x)的概率密度同样是1t\frac{1}{t}。所以:

gn+1(x)=x1gn(t)tdt=fn+1(x)g^{n+1}(x)=\int^1_x{\frac{g^n(t)}{t}dt}=f^{n+1}(x)


fn(x)f^n(x)gn(x)g^n(x)居然是相同的!这让我们有信心,fn(x)f^n(x)会有比较简单的解析式


<小蓝的草稿纸>

由此我们得到fn(x)f^n(x)的递推关系:

fn+1(x)=x1fn(t)tdtf^{n+1}(x)=\int^1_x{\frac{f^n(t)}{t}dt}

f2(x)=x11tdt=ln(x),f3(x)=x1ln(x)tdt=12ln2(x)f^2(x)=\int^1_x{\frac{1}{t}dt}=-ln(x), f^3(x)=\int^1_x{\frac{-ln(x)}{t}dt}=\frac{1}{2}ln^2(x)

可以看出,1t\frac{1}{t}恰好可以用来凑微分,易得:

fn(x)=(ln(x))n1(n1)!f^n(x)=\frac{(-ln(x))^{n-1}}{(n-1)!}

对于期望En(x)=01xfn(x)dxE^n(x)=\int^1_0{xf^n(x)dx}, 方差Dn(x)=01(xEn(x))2f(x)dxD^n(x)=\int^1_0{(x-E^n(x))^2f(x)dx},进行分部积分易得:

En(x)=12n,Dn(x)=13n14nE^n(x)=\frac{1}{2^n}, D^n(x)=\frac{1}{3^n}-\frac{1}{4^n}


“呼~”,小蓝松了一口气,“还是蛮简单的嘛”

啊,还真的是非~常~简~单呢

“我编个程模拟一下,马上就好!”,小蓝从背包中翻出了笔记本。

小蓝编程的时候,我们来回顾一下数学的结果。fn(x)f^n(x)的解析式呈现lnn1(x)ln^{n-1}(x)的形式,这意味着后拿红包的人,获得低金额的钱数的概率远高于获得高金额。而期望与方差也都随着nn的增大而降低,期望的公式与我们之前直观的猜测也是相符的。

呀,小蓝已经编好了。


<小蓝的笔记本>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
from numpy import random
import matplotlib.pyplot as plt

num = 100000
numinbin = 1000
lineplotnum = 1000
x = np.linspace(0, 1, lineplotnum)
y = np.ones(lineplotnum)
tmp = -np.log(x)
leave = np.ones(num)
for i in range(3):
get = random.random(num) * leave
leave -= get

plt.figure()
plt.hist(get, int(num / numinbin), density=1)
plt.plot(x, y)
y *= tmp / (i + 1)
plt.show()

1
第一个抢红包的人
2
第二个抢红包的人
3
第三个抢红包的人

“做了十万次抢红包模拟得到的前四个人获得红包金额比例的频率直方图,和我推导出的橙色的概率密度曲线是贴合的!”小蓝自信地指着屏幕。

果然小蓝还是在这个时候最自信。应该说,真不愧是他。

“做了这么多关于红包的分析,过年的时候要给我包超大的红包哦。”我笑着看着小蓝。

“欸欸欸欸这有什么关系吗?!”

又是快乐的一天呢


总结一下,如果每次抢红包获得的金额都服从0到剩余所有金额的均匀分布,那么第n个人获得金额占总金额的比例服从(ln(x))n1(n1)!\frac{(-ln(x))^{n-1}}{(n-1)!},期望为12n\frac{1}{2^n} ,方差为13n14n\frac{1}{3^n}-\frac{1}{4^n} 。谁先抢到谁钱多!

出现错误的原因,主要还是因为第一个抢红包的人所获得的期望金额比例达到了12\frac{1}{2}, 如果第一个人的期望比例是1n\frac{1}{n} ,情况就会符合实际“拼手气红包”的情况。为此我们可以限制均匀分布的范围,详见毕导的视频:

https://www.bilibili.com/video/BV1z7411e7qB?from=search&seid=18007488927709895164