金刚坐飞机问题

问题来源《编程之美》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)

 

你可能感兴趣的:(编程)