这道题目是:
有一个蚂蚁,从节点1出发,走到节点5结束。在节点2,3,4都有0.5概率向前,0.5概率后退。蚂蚁在节点1必然前进。求蚂蚁走到第5个节点所用步数的期望或者期望近似值:
开始的时候没有思路,但是把蚂蚁前进看作+1,后退看作-1 以为跟卡特兰数有关。也是拼命的变换。毫无进展。
不过转换一下思路,考虑枚举状态转移,令P[k,t] 表示走t步到达k节点的概率。
那么 P[k,t] 与P[k±1,t′] 有关。那么写出所有的转移:
P[1,t]=12P[2,t−1]P[2,t]=P[1,t−1]+12P[3,t−1]P[3,t]=12(P[2,t−1]+P[4,t−1])P[4,t]=12P(3,t−1)P[5,t]=12p(4,t−1)
显然可以矩阵地推。 配合快速幂,计算近似值并不难:
⎡⎣⎢⎢⎢⎢⎢⎢010000.500.50000.500.50000.500.500000⎤⎦⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢⎢P[1,t−1]P[2,t−1]P[3,t−1]P[4,t−1]P[5,t−1]⎤⎦⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢P[1,t]P[2,t]P[3,t]P[4,t]P[5,t]⎤⎦⎥⎥⎥⎥⎥⎥
令
A=⎡⎣⎢⎢⎢⎢⎢⎢010000.500.50000.500.50000.500.500000⎤⎦⎥⎥⎥⎥⎥⎥
更进一步,如果不计算精确值,而是准确值,那么答案就是计算:
(∑k>=0Akk)⎡⎣⎢⎢⎢⎢⎢⎢P[1,0]P[2,0]P[3,0]P[4,0]P[5,0]⎤⎦⎥⎥⎥⎥⎥⎥=(∑k>=0Akk)⎡⎣⎢⎢⎢⎢⎢⎢10000⎤⎦⎥⎥⎥⎥⎥⎥
令
λ1,λ2,λ3,λ4,λ5 为矩阵A的特征值。
虽然现在还不知道具体特征,但可以肯定:
λi∈(−1,1)
这是因为期望必然是收敛的(直觉,不过这个也很显然好吧)。
那么令:
A=P−BP
B=⎡⎣⎢⎢⎢⎢⎢⎢λ100000λ200000λ300000λ400000λ5⎤⎦⎥⎥⎥⎥⎥⎥
则:
(∑k>=0Akk)=(∑k>=0P−BkPk)=P−(∑k>=0Bkk)P
进一步:
∑k>=0Bkk=⎡⎣⎢⎢⎢⎢⎢⎢⎢∑λk1k00000∑λk2k00000∑λk3k00000∑λk4k00000∑λk5k⎤⎦⎥⎥⎥⎥⎥⎥⎥
对于这个和式:
∑k>=0λkk=limn−>∞∑k=0nλkk
(1−λ)∑k=0nλkk=∑k=0nλkk−∑k=0nλk+1k=∑k=0nλkk−∑k=1n+1λk(k−1)=∑k=1nλk−λn+1n=λ−λn+11−λ−λn+1n
则:
∑k=0nλkk=λ−λn+1(1−λ)2−λn+1n1−λ
由于
|λ|<1 则:
∑k>=0λkk=limn−>∞∑k=0nλkk=limn−>∞λ−λn+1(1−λ)2−λn+1n1−λ=λ(1−λ)2
如果你不相信,我们可以检验一下 ,从另一个方向计算:
λ(1−λ)2=1−(1−λ)(1−λ)2=1(1−λ)2−11−λ
1(1−λ)2=∑k>=0λk(−2λ)=∑k>=0λk(k+1)11−λ=∑k>=0λk(−1k)=∑k>=0λk
最终可以反推回原式子
这也就是说:
∑k>=0Bkk=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢(λ11−λ1)200000(λ21−λ2)200000(λ31−λ3)200000(λ41−λ4)200000(λ51−λ5)2⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=C
最终得到答案:
(∑k>=0Akk)⎡⎣⎢⎢⎢⎢⎢⎢10000⎤⎦⎥⎥⎥⎥⎥⎥=P−CP⎡⎣⎢⎢⎢⎢⎢⎢10000⎤⎦⎥⎥⎥⎥⎥⎥
不想手算,当然也有计算特征值和特征向量的算法。但我还不会,不过面式是可以百度的,于是我们在线计算这个矩阵的特征值:
特征值1: 0.9239
特征值2: 0.3827
特征值3: 0.0000
特征值4: −0.3827
特征值5: −0.9239
对于的特征向量:
⎡⎣⎢⎢⎢⎢⎢⎢0.37340.69000.52810.28580.1547−0.2792−0.21370.39480.51590.67400.00000.0000−0.0000−0.00001.00000.2792−0.2137−0.39480.5159−0.67400.3734−0.69000.5281−0.28580.1547⎤⎦⎥⎥⎥⎥⎥⎥=P
简单的矩阵求逆,便可以计算答案。