编程之美 4.1金刚坐飞机问题

问题:

现在有一班飞机将要起飞,乘客们正准备按机票号码(1, 2, 3, …N)依次排队登机。突然来了一只大猩猩(对,他叫金刚)。他也有飞机票,但是他插队第一个登上了飞机,然后随意地选了一个座位坐下了1。根据社会的和谐程度,其他的乘客有两种反应:

1. 乘客们都义愤填膺,“既然金刚同志不遵守规定,为什么我要遵守?”他们也随意地找位置坐下,并且坚决不让座给其他乘客。

2. 乘客们虽然感到愤怒,但还是以“和谐”为重,如果自己的位置没有被占领,就赶紧坐下,如果自己的位置已经被别人(或者金刚同志)占了,就随机地选择另一个位置坐下,并开始闭目养神,不再挪动位置。

那么,在这两种情况下,第 i 个乘客(除去金刚同志之外)坐到自己原机票位置的概率分别是多少?

问题1:

每个人都是随机选择座位,任意一个人坐到指定座位的概率相同,因而第i个乘客坐在其座位的概率是1/n。

问题2:

可将问题转化为“如果金刚坐在第n个位置上,那么第i个乘客坐在自己位置上的概率是多少?

(设此概率为f(n))

下面列举各种情况:

n=1或n>i 第i乘客必然可以坐到自己的位置上。(f(n)=1)
n=i 第i乘客必然坐不到自己的位置上。   (f(n)=0)
1<n<i 此情况下又分为两种子情况,看下面的示意图

   20131008a

下面是如何计算(1<n<i)下的f(n):

clip_image002[6]

clip_image002[8] 

假设N=100,显然f(100)=0

f(99) = 1/2

f(98) = 1/3 + 1/3 * f(99) = 1/2

f(97) = 1/4 + 1/4 * (f(98) + f(99)) = 1/2

……

可以看出f(n)=f(n+1) (1<n<i-1)

看不明白书上的这条通项公式如何推导得出的,知道的大神解答一下!

clip_image002[10]

最后得出:

clip_image002[12]

P=1/n*(f(1) + f(2) + ... + f(99) + f(N))就是第i个乘客坐在自己位置上的概率。

参考文章:

http://blog.csdn.net/FlyingIceCS/article/details/6007735

posted @ 2013-10-08 15:00  Linka  阅读(453)  评论(0编辑  收藏  举报