置换与轮换——百囚犯问题
问题描述
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的置换.
我们假定置换下面假定置换 存在长度大于50的轮换
,其长度为 l.
------轮换中的元素有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 刘铎 离散数学
转载于:https://www.cnblogs.com/lfri/p/9872617.html
置换与轮换——百囚犯问题相关推荐
- 百囚犯问题(100 prisoners problem)
百囚犯问题(100 prisoners problem) 文章目录 百囚犯问题(100 prisoners problem) 问题描述 策略选择 拓展到2n个囚犯 问题描述 Philippe Flaj ...
- 《趣题学算法》—第1章1.5节置换与轮换
本节书摘来自异步社区<趣题学算法>一书中的第1章1.5节置换与轮换,作者徐子珊,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.5 置换与轮换 设有n个两两不 ...
- 置换怎么表示成轮换_§2.3 置换群
让我们暂时先放下上节笔记中循环群美丽的性质,来专心看看置换群吧. 不得不说,置换群只是群的表现形式之一,本身不具有特殊的性质.但是,由于置换群所含内容的广泛性,它可以和其余所有的群(只能是有限群)形成 ...
- HDU3923-Invoker-polya n次二面体
polya定理.等价类的个数等于∑颜色数^置换的轮换个数 不可翻转的串当中.直接计算∑m^(gcd(n,i)) ,这里gcd(n,i)就是第i个置换的轮换数. 翻转的情况再分n奇偶讨论. n次二面体都 ...
- POJ 2409 Let it Bead (Polya定理)
题意 用k种颜色对n个珠子构成的环上色,旋转翻转后相同的只算一种,求不等价的着色方案数. 思路 Polya定理 X是对象集合{1, 2, --, n}, 设G是X上的置换群,用M种颜色染N种对象,则不 ...
- 《离散数学》双语专业词汇表 名词术语中英文索引
<离散数学>双语专业词汇表 set:集合 subset:子集 element, member:成员,元素 well-defined: 良定,完全确定 brace:花括号 represent ...
- hdu 1802 Black and white painting(置换群)
题目链接:hdu 1802 Black and white painting 题意: 有一个n*n的格子,然后用c种颜色去涂,问你有多少种方案. 能旋转,反射的算一种方案. 题解: polya定理的经 ...
- 操作系统面试题(史上最全、持续更新)
尼恩面试宝典专题40:操作系统面试题(史上最全.持续更新) 本文版本说明:V28 <尼恩面试宝典>升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼恩获取, 发送 ...
- 近世代数 笔记与题型连载 第八章(置换群)
文章目录 基本概念 1.置换 2.置换的复合 3.置换群 4.置换的轮换表示 5.轮换的逆 6.轮换的不相交 7.轮换的阶 8.对换 9.置换的奇偶性 10.置换的类型 11.正多边形旋转翻转构成的群 ...
最新文章
- springboot数据源配置属性
- 为博客园博文添加目录的两种方法
- 【Javascript】 == 、=== 区别
- [codevs 1912] 汽车加油行驶问题
- KMP算法理解(转)
- iOS tabview 适配问题
- 看完这篇文章保你面试稳操胜券——基础篇(html/css)
- netbeans代码提示_Java代码现代化的七个NetBeans提示
- neo4j︱neo4j批量导入neo4j-import (五)
- Android 大漠插件功能,猩猩助手安卓模拟器怎么用大漠插件
- 【数据采集】-目前比较流行的几种数据采集方式
- 图书所属类别用mysql_Java图书信息查询
- 数据库优化---空间换时间优化
- Activity切换闪屏问题
- Vuetify学习笔记(一)gird栅格系统
- oracle软件工程,.Net软件工程师学用Oracle系列(9):系统函数(上)
- Ubuntu安装以太坊开发环境
- 专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?
- plupload 中文API
- 12月17日云栖精选夜读 | 用PrettyPrinter,让Python输出更漂亮,你值得拥有
热门文章
- 蜘蛛纸牌 java代码_源代码-Java实现蜘蛛纸牌.doc
- 一条SQL语句实现查询每个部门中年龄最大的员工信息
- 达梦之路——两种方式部署DM7备份作业
- SparkML之回归(二)岭回归和Lasso阐述及OLS,梯度下降比较
- 大IPD之——学习华为战略人力资源管理:从职能管理到业务伙伴(十五)
- NVIDIA宣布RAPIDS、医学影像应用和面向自动驾驶汽车的驾驶模拟器
- 康托展开和逆康托展开
- Springboot毕设项目大学生勤工俭学系统09i5rjava+VUE+Mybatis+Maven+Mysql+sprnig)
- 一位非科班,台湾前端妹子的硅谷之路
- java实现小程序开发(一)