All roads lead to Rome, some smooth, some rough.

 

算法导论习题5.2.4介绍了一个帽子保管问题(hat-check problem):有n位顾客,他们每个人给餐厅负责保管帽子的服务生一顶帽子。服务生以随机的顺序将帽子归还给顾客。请问拿到自己帽子的顾客的期望数目是多少?

解法一:利用算法导论一书中介绍的indicator random variables,假设随机变量Xi满足(1<=i<=n):

 

 

那么总的随机变量x满足:

对于每一个顾客,他拿到自己帽子的概率是1/n,所以:

  

所以,

这个思路根据算法导论书上的讲解比较容易想到,但是真正想的时候我不免回到了忘日学习概率论的惯性思维中,于是有了解法二,比解法一复杂不少。

解法二

基本思想是利用 期望=\sum_{i=1}^{n}i*i个人拿到自己帽子的概率。这样一来需要计算有且仅有i个人拿到自己帽子的概率。容易发现,关键的步骤是找到没有一个人拿到自己帽子的概率,因为有且仅有i个人拿到自己帽子的总情况数可以通过先用C(i,n)的选法将i个拿对帽子的人固定,然后剩下的(n-i)个人都没有拿到自己帽子的情况数来计算。于是先将问题转化成求n个人都没有拿到自己帽子的情况数。这个问题其实就是著名的伯努利放错信封问题。可以利用容斥原理解决。

容易得到,有一个人i拿对帽子的总情况数是(n-1)!,有两个人i和j拿对帽子的总情况数是(n-2)!,...,有(n-2)个人(人已经选定)拿对帽子的总情况数是2!,有(n-1)个人拿对帽子,也就是有n个人拿对帽子的情况数是1.那么由容斥原理,有人拿对帽子的情况总数是:

那么没有一个人拿对帽子的情况总数应该是:

这样一来利用前面说过的期望公式,可以得到最终的答案是:

可以证明...(除了数学归纳法我暂时还没有想出更好的方法)这个求和的结果就是1.

两种方法都是利用了概率论中的算法,一个从随机变量入手,一个从期望的定义入手,虽然都得到了最终的结果,但是解法二明显更加复杂。

很久没有利用过数学了,脑子反应特别慢。昨天看了看微软的笔记题目,有些看上去像是当年的数学竞赛题目,当年可以秒杀的,现在看上去却半天没有想法,学了这么多年,都学了些啥呢?...希望伴随着算法导论的学习自己能够找回数学状态。

 

posted on 2011-09-21 20:40  bovine  阅读(573)  评论(0编辑  收藏  举报