• 置换与轮换——百囚犯问题


    问题描述

    Philippe Flajolet和Robert Sedgewick在2009年提出了“百囚犯问题(100 prisoners problem)。

    在某个法制不健全的国家,监狱中有编号从1到100的100名囚犯,监狱长给了他们最后一次机会:

      -----一个房间里有100个抽屉,监狱长随意把1到100这100个号码放到100个抽屉里,每个抽屉一张

      -----囚犯们逐个进入房间,每人可以任意打开50个抽屉,之后关上

      -----如果每位囚犯都在这50个抽屉中找到了他的号码,那么所有的囚犯都会被赦免;如果有人没有找到他的号码,那么所有的囚犯都会被处死

      -----在第一个囚犯进入房间之前,囚犯们允许在一起讨论开抽屉的“策略”;但一旦第一个囚犯进入房间,他们之间就被禁止交流

    设计出一种策略,使得尽可能被赦免

    问题分析

    如果纯粹随机开抽屉,那么所有人被赦免的概率是(50 / 100)^100 ≈ 8*10^-31,可见这个概率非常的小。

    囚犯有什么好一些的策略?

    下面给出已经被证明的最优策略

    循环跟踪策略

    每名囚犯进入房间后都——
    1、先打开自己号码的抽屉
    2、如果这个抽屉有他自己的号码,他就成功了
    3、否则,抽屉里会有另外一个号码,然后他打开这个号码的抽屉
    4、不断地重复第2步和第3步,直到他已经找到自己的号码,或者已经打开50个抽屉都没找到(那全体就失败了)

     示例1:

    考虑一个迷你版的,把100改成8,50改成4,抽屉放纸条的方式按如下所示:

    策略的具体实现如下:

    1号囚犯打开1号抽屉发现8号纸条、打开8号抽屉发现4号纸条、打开4号抽屉发现6号纸条、打开6号抽屉发现1号纸条-----命悬一线有惊无险
    2号囚犯开2号-->开5号-->开3号-----找到
    3号囚犯开3号-->开2号-->开5号-----找到
    4号囚犯开4号-->开6号-->开1号-->开8号-----找到
    5号囚犯开5号-->开3号-->开2号-----找到
    6号囚犯开6号-->开1号-->开8号-->开4号-----找到
    7号囚犯开7号-----找到
    8号囚犯开8号-->开4号-->开6号-->开1号-----找到
    
    
    大家都被赦免了!

    示例2:

    抽屉放纸条的方式如下:

    策略的具体实现如下:

    第一个进去的囚犯开1号-->开5号-->开8号-->开2号----不是,,,( ¯ □ ¯ )……(x___x) 

    进一步分析:

    抽屉的编号和抽屉里的数字形成置换,根据定理任意置换可唯一的表示成若干不相交轮换的复合(积).

    于是示例1中的置换可写成:(1,8,4,6)(2,5,3)(7),示例2中的置换可写成:(1,5,8,2,7)(3,4,6)

    于是容易得出结论:如果 i 所在的轮换长度不超过50,那么第 i 号囚犯一定可以找到自己的号码纸条;如果 i 所在的轮换长度超过50,那么第 i 号囚犯一定找不到自己的号码纸条。

    几点标注

    1、其实按照这个策略,当前50个囚犯成功时,后50已经不必再试就知道他们必然获释

    2、在前50个人中如果有人是第50个抽屉才发现自己的号码,那么后面的囚犯都不必再试

    最优策略下的成功概率

    实质就是在 100! 种(n种元素的置换有n!种)中,有多少置换存在长度大于50的轮换?

    易知任意一个置换分解后至多存在一个长度大于50的置换.

    我们假定置换下面假定置换 pi 存在长度大于50的轮换 sigma ,其长度为 l.

      ------轮换sigma中的元素有C(100,l)种可能

      -------选定l个元素后,可以形成(l - 1)!种不同的轮换(即圆排列数)

      -------剩下的(100 - l)个元素可形成(100 - l)!种置换

      -------于是这样的置换一共有C(100,l) * (l - 1) * (100 - l) = 100! / l种

    囚犯们遇到这样的置换的概率是

    所以成功的概率是1 - 0.6882 = 0.3118.

    渐近分析

    当把100改做2n,50改做n,该策略失败的概率为Σ2nn+1(1/l),记H(n) = 1 + 1/2 + 1/3 +...+1/n

    成功的概率 = 1 - (H2n - Hn) = 1 - (H2n - ln(2n)) + (Hn - ln(n)) - ln2

    已知,于是

    总结

    最优策略虽然很容易理解,但却不好证明,以后会证了再补充吧/இ௰இ!

    参考链接:

    https://en.wikipedia.org/wiki/100_prisoners_problem

    https://zhuanlan.zhihu.com/p/31211827?edition=yidianzixun&utm_source=yidianzixun&yidian_docid=0HzDk3uW

    中国大学mooc  刘铎  离散数学

     

  • 相关阅读:
    进程管理
    linux进程间的通信方式
    linux进程调度的算法
    安装haroopad
    SAE部署Java应用
    Jetty 8.1 安装 运行 部署
    javaweb学习总结(五)——Servlet开发(一)
    eclipse打war包
    Java基础学习总结——Java对象的序列化和反序列化
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
  • 原文地址:https://www.cnblogs.com/lfri/p/9872617.html
Copyright © 2020-2023  润新知