目录

  • 背景介绍
    • 题目
    • 随机策略
    • 环策略
    • 举一反三
    • 引用资料

背景介绍

优秀的开发在拿到产品需求后,一定会有一个抽象转化的过程,需要将复杂业务场景转化为高效的算法去实现,而不是按着业务需求开始写流水账式脚本,这个过程其实就和我们解数学题很类似:

分析题目 – 定义变量 – 开始求解。

今天给大家分享的就是一道有意思的数学题,这题是前阵子在网上充(chong)电(lang)时看到的,也欢迎大家提出更优解。

题目

现有编号1至100的100名的囚犯
每个囚犯的编号都写在一张纸条上,这100张纸条,被随机放入一个房间里的100个盒子,每个盒子放一张,这些盒子除了编号外,外观完全相同的。
每个囚犯有一次机会,可单独进入房间,任意查看50次盒子,看完后要将盒子盖上,不能留下任何痕迹。如果他能恰好看到“自己的编号”,视为任务成功,需要立刻离开房间,他也不能与其他人再有交流。
囚犯们可以在开始之前讨论策略。而一旦第一个囚犯进入房间后,囚犯之间就不能有任何交流。
若全部囚犯都在50次内找到自己的编号,则全员释放;任何一个囚犯没有找到自己的编号,则全员处决。
那么请问:囚犯们应该制定怎样的策略,才能尽可能提高全员释放的概率?

大家可以先思考一分钟,再继续往后看。

随机策略

我们先看,囚犯们如果躺平,不指定任何策略,全员逃生的概率。
100个箱子,每个人可看50次,那么每个人成功概率都是1/2,100个人就是:

1/2 * 1/2 *1/2 ······ *1/2 = (1/2)100

换算成小数就是:0.000000000000000000000000008

这个概率,与大海捞针无异。

环策略

先说策略:

每个囚犯进去,均按自己的编号去找对应的箱子, 若找到,则离开房间; 若未找到,则按箱子里纸条的编号去开下一个对应编号的箱子。
依次类推,直到找到自己的编号或者用完50次次数。

策略听起来很简单,难的是怎么证明这个策略有效。
下面开始证明:
由于纸条和箱子个数都是有限的,且100张纸条均在100个盒子里,没有空盒子,所以每个囚犯按顺序开盒子一定能在最多100次内找到自己的纸条,这个寻址过程实际上形成了一个长度小于等于100的环。
如下图:

这实际上已经形成了闭环:

这也是这个策略被称之为环策略的原因。
接下来,问题就转化成了:求随机排列箱子和其中纸条,组成圆环,其长度小于等于50的概率。

我们先算长度为100的圆环出现的概率:
首先,随机排列的次数为:

100 * 99 * 9······2 * 1 = 100!

实际上,这里的组合又有大量的重复,从一个长度为100的环中任意位置开始寻址,其实都是同一个环,所以结果要再除以100,即长度为100的圆环出现的概率为:

100!/100

已知100张纸条随机放进100个箱子的方案总数是100!
那么得到圆环的长度为100的概率:

(100! /100) /100! =1/100

长度为99的概率,算法都一样,为1/99
依次类推,后续长度为1/98…1/1。

需要指出的是,这里的平均值,也是期望
如果依此类推到环的长度为1,则每次布置纸条都会出现1个长度为1的环,
这里其实是指有时会没有长度为1的环,有时会有多个长度为1的环,平均值为1
依此类推,对于长度>=51的环,平均值和期望是一回事

那么,我们再来看囚犯失败的概率p(f),其实就是环长度大于等于51的概率,为:

p(f) = 1/51+ 1/52 +1/53 + ······· + 1/100 = 0.69

成功概率p(s)为:

p(s) = 1 - p(f) = 0.31

也就是说,使用环策略之后,逃生概率从(1/2)100提升到了约1/3,甚至比两人两盒子随机抽取逃生的概率(1/4)更高。

举一反三

那么,如果把囚犯和盒子的数目提升到1000,10000甚至更多的时候,这个结论是否还成立?
如果有趋近于无穷多的囚犯,这个逃生的概率是否会收敛?

  1. 我们先来根据上面的算法推导一遍人数增加时的逃生概率:

可以看到,到十亿级别的时候,逃生的概率仍然在30%左右,那么是否意味着这个概率就是收敛的呢?
我们继续往下看。
之前计算成功概率时,实际上是拿1减去成功概率,即:

p(s) = 1 - p(f)

而失败概率等于:

p(f) = 1/51 + 1/52 + 1/53 + 1/54 + … + 1/100

失败概率可以用下图矩形部分的面积表示:
y轴表示概率,x轴代表最长环的长度。


在这些矩形的上方贴合着一条曲线,这个曲线就是关于X的反比例函数:
1x\frac{1}{x}x1​
曲线下方的50到100的面积之后近似的等于所有矩形面积之和。
而当囚犯数量趋近于无穷时,这个近似估计就越来越精确,这个面积的计算,
实际上就是求反比利函数(1/x)从n到2n定积分:

p(f)=∫n2n1xdx=ln2p(f) = \int_{n}^{2n} \frac {1} {x} dx = ln2 p(f)=∫n2n​x1​dx=ln2

那么成功的概率就为:

p(s)=1−ln2≈30.7p(s) = 1- ln2 \approx 30.7%p(s)=1−ln2≈30.7

结果得证,当囚犯数目趋近于无穷大时,使用环策略,
囚犯成功逃生的概率是收敛的,约为30.7%

– by eric02.li

引用资料

https://docs.qq.com/doc/DWWZSRXhyc2NEaEFZ
https://www.youtube.com/watch?v=iSNsgj1OCLA
https://b23.tv/OE0vVCK

囚徒逃生问题优化策略相关推荐

  1. 亿级PV,常见性能优化策略总结与真实案例

    作者:晓明 来自:美团技术团队 0 题记 美团网是国内最大的O2O服务平台,虽然经常面临高并发.大流量等问题,但在用户体验优化上美团APP仍被众多IT同行所推崇,他们在性能优化方面积累的宝贵经验尤其值 ...

  2. CUDA 并行计算优化策略总结

    作者 | LustofLife@知乎 来源 | https://zhuanlan.zhihu.com/p/297201517 编辑 | 极市平台 导读 并行计算为了提高算法运行效率,本文通过以矩阵乘法 ...

  3. 一文概览深度学习中的五大正则化方法和七大优化策略

    深度学习中的正则化与优化策略一直是非常重要的部分,它们很大程度上决定了模型的泛化与收敛等性能.本文主要以深度卷积网络为例,探讨了深度学习中的五项正则化与七项优化策略,并重点解释了当前最为流行的 Ada ...

  4. webpack4.0打包优化策略(二)

    打包优化策略 webpack4.0打包优化策略(一) webpack4.0打包优化策略(二) webpack4.0打包优化策略(三) 区分开发和生产环境 通常我们在开发网页时需要区分构建环境 开发环境 ...

  5. 计算机算法对程序设计的作用,计算机编程中数学算法的优化策略

    李钰 摘要:在计算机编程中,合理地运用数学算法所拥有的优势不但可以完好地针对所拥有的问题进行总结分类归纳,还可以将其归纳作为基础从而进行针对性的统一计算,并且能够将非常复杂的问题进行整体的简化并且将其 ...

  6. hbase数据读取优化_从hbase读取数据优化策略和实验对照结果

    起因:工作须要.我须要每5分钟从hbase中.导出一部分数据,然后导入到ES中.可是在開始阶段编写的python脚本,我发现从hbase读取数据的速度较慢,耗费大量的时间.影响整个导数过程,恐怕无法在 ...

  7. 标注(annotation)的反向优化策略 将Yunyang tensorflow-yolov3 predicted转换为正常yolo标注

    文章目录 原 20200708 当起始图片序号不是1时,可改成以下代码 原 执行evaluate.py后,会在predicted文件夹生成预测信息 如图,将Yunyang tensorflow-yol ...

  8. 图像识别 标注(annotation)的反向优化策略

    人工对数据集d进行标注p0(格式p)–> 使用数据集d和标注p0训练生成权重文件w0–> 使用w0对d进行预测,生成标注p00(格式t)–> 将标注p00转换成标注p1(格式p)–& ...

  9. 52条SQL语句性能优化策略

    本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引. 2.应尽量避免在 WHERE 子句中对字 ...

最新文章

  1. Clang:LLVM的C语言家族前端
  2. 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现
  3. 制作centos6的启动光盘boot.iso
  4. 谈谈个人代码对团队合作影响
  5. 飞鸽传书FreeEIM买还是不买?
  6. Python+matplotlib一笔绘制红色五角星
  7. Jmeter启动报错解决方案
  8. (转)最近100年全球最顶尖公司的共性
  9. comsol光学仿真02
  10. 计算机静音图标无法更改怎么办,声音图标没了不要着急,用金山毒霸2011进行修复 - 金山安全专题 - 声音图标没了怎么办? - 安全专题...
  11. Windows使用ROS机器人操作系统12记录
  12. 15个国外便宜主机介绍
  13. c语言写的exe文件怎么改图标,c/c++修改exe文件图标
  14. 解决 您的安全设置不允许将此应用程序安装到您的计算机上的问题
  15. 嵌入式网络的基础知识 -- 数据包的组装、拆解、各头部格式
  16. 慧极必伤,情深不寿,强极则辱;谦谦君子,温润如玉
  17. USB学习笔记(3)HID应用分析
  18. 项目 - 基于Docker Swarm的高可用Web集群
  19. Linux mint 换中文字体,Linux mint 全局字体不统一,楷体无法更换问题
  20. 第三代人工智能基础设施背后,是一次技术应用的常识普及运动

热门文章

  1. 信息学奥赛一本通:1163:阿克曼(Ackmann)函数
  2. 2019年阿里云服务器CentOS 7.3 64位 搭建VNC远程桌面服务步骤与方法
  3. 诚之和:网络安全已成为最紧迫、最基础的安全问题,监管制度已在路上
  4. Qt5基础 背景图,绘图,点击事件
  5. Android扫描蓝牙问题,你是不是位置权限和GPS都打开了还是扫不出东西
  6. 2021再看Deno
  7. ubuntu16下 D415 驱动配置与硬件更新
  8. 25岁,最好的年纪才开始
  9. 搬运:您的安全设置不允许将此应用程序安装到您的计算机上
  10. 如何处理输入框的不允许输入空格