一次面试的题目

这道题目是:

有一个蚂蚁,从节点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,t1]P[2,t]=P[1,t1]+12P[3,t1]P[3,t]=12(P[2,t1]+P[4,t1])P[4,t]=12P(3,t1)P[5,t]=12p(4,t1)

显然可以矩阵地推。 配合快速幂,计算近似值并不难:
[00.5000100.50000.500.50000.5000000.50][P[1,t1]P[2,t1]P[3,t1]P[4,t1]P[5,t1]]=[P[1,t]P[2,t]P[3,t]P[4,t]P[5,t]]

A=[00.5000100.50000.500.50000.5000000.50]

更进一步,如果不计算精确值,而是准确值,那么答案就是计算:
(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=PBP

B=[λ100000λ200000λ300000λ400000λ5]

则:
(k>=0Akk)=(k>=0PBkPk)=P(k>=0Bkk)P

进一步:

k>=0Bkk=[λ1kk00000λ2kk00000λ3kk00000λ4kk00000λ5kk]

对于这个和式:
k>=0λkk=limn>k=0nλkk

(1λ)k=0nλkk=k=0nλkkk=0nλk+1k=k=0nλkkk=1n+1λk(k1)=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λ)211λ

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]=PCP[10000]

不想手算,当然也有计算特征值和特征向量的算法。但我还不会,不过面式是可以百度的,于是我们在线计算这个矩阵的特征值:
特征值1: 0.9239
特征值2: 0.3827
特征值3: 0.0000
特征值4: 0.3827
特征值5: 0.9239
对于的特征向量:

[0.37340.27920.00000.27920.37340.69000.21370.00000.21370.69000.52810.39480.00000.39480.52810.28580.51590.00000.51590.28580.15470.67401.00000.67400.1547]=P

简单的矩阵求逆,便可以计算答案。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章