一次面试的题目

这道题目是:

有一个蚂蚁,从节点1出发,走到节点5结束。在节点2,3,4都有0.5概率向前,0.5概率后退。蚂蚁在节点1必然前进。求蚂蚁走到第5个节点所用步数的期望或者期望近似值:

开始的时候没有思路,但是把蚂蚁前进看作+1,后退看作-1 以为跟卡特兰数有关。也是拼命的变换。毫无进展。
不过转换一下思路,考虑枚举状态转移,令 P[k,t] P [ k , t ] 表示走t步到达k节点的概率。
那么 P[k,t] P [ k , t ] P[k±1,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) P [ 1 , t ] = 1 2 P [ 2 , t − 1 ] P [ 2 , t ] = P [ 1 , t − 1 ] + 1 2 P [ 3 , t − 1 ] P [ 3 , t ] = 1 2 ( P [ 2 , t − 1 ] + P [ 4 , t − 1 ] ) P [ 4 , t ] = 1 2 P ( 3 , t − 1 ) P [ 5 , t ] = 1 2 p ( 4 , t − 1 )

显然可以矩阵地推。 配合快速幂,计算近似值并不难:
010000.500.50000.500.50000.500.500000P[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] [ 0 0.5 0 0 0 1 0 0.5 0 0 0 0.5 0 0.5 0 0 0 0.5 0 0 0 0 0 0.5 0 ] [ 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 A = [ 0 0.5 0 0 0 1 0 0.5 0 0 0 0.5 0 0.5 0 0 0 0.5 0 0 0 0 0 0.5 0 ]

更进一步,如果不计算精确值,而是准确值,那么答案就是计算:
(k>=0Akk)P[1,0]P[2,0]P[3,0]P[4,0]P[5,0]=(k>=0Akk)10000 ( ∑ k >= 0 A k k ) [ P [ 1 , 0 ] P [ 2 , 0 ] P [ 3 , 0 ] P [ 4 , 0 ] P [ 5 , 0 ] ] = ( ∑ k >= 0 A k k ) [ 1 0 0 0 0 ]

λ1,λ2,λ3,λ4,λ5 λ 1 , λ 2 , λ 3 , λ 4 , λ 5 为矩阵A的特征值。
虽然现在还不知道具体特征,但可以肯定:
λi(1,1) λ i ∈ ( − 1 , 1 )

这是因为期望必然是收敛的(直觉,不过这个也很显然好吧)。
那么令:
A=PBP A = P − B P

B=λ100000λ200000λ300000λ400000λ5 B = [ λ 1 0 0 0 0 0 λ 2 0 0 0 0 0 λ 3 0 0 0 0 0 λ 4 0 0 0 0 0 λ 5 ]

则:
(k>=0Akk)=(k>=0PBkPk)=P(k>=0Bkk)P ( ∑ k >= 0 A k k ) = ( ∑ k >= 0 P − B k P k ) = P − ( ∑ k >= 0 B k k ) P

进一步:

k>=0Bkk=λk1k00000λk2k00000λk3k00000λk4k00000λk5k ∑ k >= 0 B k k = [ ∑ λ 1 k k 0 0 0 0 0 ∑ λ 2 k k 0 0 0 0 0 ∑ λ 3 k k 0 0 0 0 0 ∑ λ 4 k k 0 0 0 0 0 ∑ λ 5 k k ]

对于这个和式:
k>=0λkk=limn>k=0nλkk ∑ k >= 0 λ k k = lim n − > ∞ ∑ k = 0 n λ k k

(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 ( 1 − λ ) ∑ k = 0 n λ k k = ∑ k = 0 n λ k k − ∑ k = 0 n λ k + 1 k = ∑ k = 0 n λ k k − ∑ k = 1 n + 1 λ k ( k − 1 ) = ∑ k = 1 n λ k − λ n + 1 n = λ − λ n + 1 1 − λ − λ n + 1 n

则:
k=0nλkk=λλn+1(1λ)2λn+1n1λ ∑ k = 0 n λ k k = λ − λ n + 1 ( 1 − λ ) 2 − λ n + 1 n 1 − λ

由于 |λ|<1 | λ | < 1 则:
k>=0λkk=limn>k=0nλkk=limn>λλn+1(1λ)2λn+1n1λ=λ(1λ)2 ∑ k >= 0 λ k k = lim n − > ∞ ∑ k = 0 n λ k k = lim n − > ∞ λ − λ n + 1 ( 1 − λ ) 2 − λ n + 1 n 1 − λ = λ ( 1 − λ ) 2

如果你不相信,我们可以检验一下 ,从另一个方向计算:
λ(1λ)2=1(1λ)(1λ)2=1(1λ)211λ λ ( 1 − λ ) 2 = 1 − ( 1 − λ ) ( 1 − λ ) 2 = 1 ( 1 − λ ) 2 − 1 1 − λ

1(1λ)2=k>=0λk(2λ)=k>=0λk(k+1)11λ=k>=0λk(1k)=k>=0λk 1 ( 1 − λ ) 2 = ∑ k >= 0 λ k ( − 2 λ ) = ∑ k >= 0 λ k ( k + 1 ) 1 1 − λ = ∑ k >= 0 λ k ( − 1 k ) = ∑ k >= 0 λ k

最终可以反推回原式子
这也就是说:
k>=0Bkk=(λ11λ1)200000(λ21λ2)200000(λ31λ3)200000(λ41λ4)200000(λ51λ5)2=C ∑ k >= 0 B k k = [ ( λ 1 1 − λ 1 ) 2 0 0 0 0 0 ( λ 2 1 − λ 2 ) 2 0 0 0 0 0 ( λ 3 1 − λ 3 ) 2 0 0 0 0 0 ( λ 4 1 − λ 4 ) 2 0 0 0 0 0 ( λ 5 1 − λ 5 ) 2 ] = C

最终得到答案:

(k>=0Akk)10000=PCP10000 ( ∑ k >= 0 A k k ) [ 1 0 0 0 0 ] = P − C P [ 1 0 0 0 0 ]

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

0.37340.69000.52810.28580.15470.27920.21370.39480.51590.67400.00000.00000.00000.00001.00000.27920.21370.39480.51590.67400.37340.69000.52810.28580.1547=P [ 0.3734 − 0.2792 0.0000 0.2792 0.3734 0.6900 − 0.2137 0.0000 − 0.2137 − 0.6900 0.5281 0.3948 − 0.0000 − 0.3948 0.5281 0.2858 0.5159 − 0.0000 0.5159 − 0.2858 0.1547 0.6740 1.0000 − 0.6740 0.1547 ] = P

简单的矩阵求逆,便可以计算答案。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值