zoukankan      html  css  js  c++  java
  • 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.

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

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

  • 相关阅读:
    ES vm报错
    ln -s /usr/local/jdk1.8.0_201/bin/java /bin/java
    docker压缩导入导出
    微软各种资源整理(迅雷下载),感谢站长。
    python打开文件的访问方式
    docker换源
    selinux
    ElasticsearchException: java.io.IOException: failed to read [id:0, file:/data/elasticsearch/nodes/0/_state/global-0.st]
    带了纸和笔,要记哪些东西?
    redis命令行批量删除匹配到的key
  • 原文地址:https://www.cnblogs.com/bovine/p/2184431.html
Copyright © 2011-2022 走看看