问题来源《编程之美》4.1 问题2
问题描述:
现在有一班飞机要起飞了。乘客们准备按机票号码(1,2,3,...,N)依次登记,突然来了只大猩猩(对,他叫金刚),也有飞机票,但是他插队第一个登上了飞机。然后随意的选了一个座位坐下。
现在乘客们虽然感到愤怒,但还是以“和谐”为重,如果自己的位置没有被占领,就赶紧坐下,如果自己的位置被别人(或金刚同志)占了,就随机的选择另一个位置坐下,不再挪动位置。
这种情况下,第i个乘客(除去金刚同志)坐到自己原机票位置的概率是多少??
问题解答:
网上有书上的扫描版
http://wenku.baidu.com/view/3a0014a6f524ccbff121841d.html
没必要想的太复杂了
当n>i 时
第i个人坐到自己位置的概率是百分之百
当n =i 时
第i个人坐到自己位置的概率是0
当1<=n<i 时
可以理解为,因为金刚坐在第n个人的位置上,当第n个人上飞机时,就必须在剩余的(N-n+1)个位置中选一个,
1) 如果他选了金刚的那个位置,那么以后的人都可以自己坐自个的位置;---------------这个概率是1/(N-n+1)
2) 如果他不选金刚自身的那个位置,那么他就可以抢占了别人的位置,假设为j(就是n+1之后的所有位置,包括n+1),效果等同于“金刚”占抢了位置j.
即
f(n) = (1/(N-n+1)) *(1+f(n+1)+f(n+2)+f(n+3)+.....+f(N))
突然明白了~~~~
当 n < i 时
f(n) = 1/(N-n+1)*(1+f(n+1)+f(n+2)+f(n+3)+.....+f(N)),
即(N-n+1)*f(n) = 1+f(n+1)+f(n+2)+f(n+3)+.....+f(N) ------------------等式1
如果(n+1) < i
也有f(n+1) = 1/(N-n)*(1+f(n+2)+f(n+3)+.....+f(N))
即 (N-n)*f(n+1) = 1+f(n+2)+f(n+3)+.....+f(N) ------------------------等式2
等式1和等式2相减,可得到
当 (n+1) < i 时
f(n) = f(n+1)
由此可知,当1<=n<i 时
金刚坐在第n个位置,与金刚坐在第j个位置(n<j<i),对于第i个乘客座在自己座位上的概率丝毫不影响,
故f(n) = f(n+1) = .....= f(i-1)
------------------------------------
求f(i-1)就简单了哦~
金刚坐了第(i-1)个位置,这种情况下,第(i-1)个人只要不坐在第i个位置即可。
则第i个人坐在自己位置的概率为
1-1/(N-i+2) = (N-i+1)/(N-i+2)