热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

找东西背后的概率问题——From《思考的乐趣Martix67数学笔记》

来自于《思考的乐趣-Matrix67数学笔记》第一部分第2节的一条小题题目:我的书桌有8个抽屉,分别用数字1到8编号。每次拿到一份文件后,我都会把这份文件随机的放在一个抽屉中。但是我非常粗心,有15

来自于《思考的乐趣-Matrix67数学笔记》第一部分第2节的一条小题


题目:

我的书桌有8个抽屉,分别用数字1到8编号。每次拿到一份文件后,我都会把这份文件随机的放在一个抽屉中。但是我非常粗心,有1/5的概率会忘了把文件放进抽屉里,最终把文件搞丢。
现在我要找一份非常重要的文件。我将按顺序打开每一个抽屉,直到找到这份文件为止(或者很悲剧的发现,翻遍了所有抽屉都没能找到这份文件)。考虑下面三个问题。
(1) 假如我打开了第一个抽屉,发现里面没有我要的文件。这份文件在其余的7个抽屉里的概率是多少?
(2) 假如我翻遍了前4个抽屉,里面都没有我要的文件。这份文件在剩下的4个抽屉里的概率是多少?
(3) 假如我翻遍了前7个抽屉,里面都没有我要的文件。这份文件在最后一个抽屉里的概率是多少?

这实际上是道很简单的题目,只是惭愧,大学里学的概率已经全部还给老师,第一遍看题目愣是没解出来。第二遍看题目时才发现M牛在第1节提到贝叶斯定理的用意。


以第(1)个问题为例

解:

设事件A:在第一个抽屉没有找到文件

设事件B:在其余的7个抽屉中找到文件

则所求概率为P(B|A)

根据贝叶斯公式,可得P(B|A) = P(A|B)·P(B) / P(A)

对于P(A|B),当事件B发生时,事件A发生的概率显然为1

对于P(B),可得P(B) = (1 - 1/5)·(7/8) = 7/10

对于P(A),可得P(A) = 1 - (1- 1/5)·(1/8) = 9/10

代入各值,可得P(B|A) = (7/10) / (9/10) = 7/9

解毕


M牛在书中给出的一个巧妙解法是这样的。

注意到,平均每10份文件就有两份被搞丢,其余8份平均地分给了8个抽屉。假如我把所有搞丢了的文件都找了回来,那么它们应该还占2个抽屉。这让我们想到了这样一个有趣的思路:在这8个抽屉后加上2个虚拟抽屉——抽屉9和抽屉10,这两个抽屉专门用来装我丢掉的文件。我们甚至可以把题目等价地变为:随机把文件放在10个抽屉里,但找文件时不允许打开最后2个抽屉。当我已经找过n个抽屉但仍没找到我想要的文件时,文件只能在剩下的10-n个抽屉里,但是我只能打开剩下的8-n个抽屉,因此所有的概率是(8 - n)/(10 - n)。当n分别等于1、4、7时,这个概率值分别是7/9、2/3和1/3。


然后来看下如何从普通的解法转到(8 - n)/(10 - n)这个结论。


从基本的解法中可发现,对于此题中的事件A、B,有P(A|B)恒等于1。因此,实际上当文件不在前n个抽屉中时,文件在后(抽屉总数-n)个抽屉中的概率就为(文件在后(抽屉总数 - n)个抽屉中的概率 除以 文件不在前n个抽屉中的概率)

考虑文件不在前n个抽屉中的概率,可得P(文件不在前n个抽屉中) = 1 - P(文件不丢失)·(n / 抽屉总数)

考虑文件在后(抽屉总数 - n)个抽屉中的概率,可得P(文件在后(抽屉总数 - n)个抽屉中) = P(文件不丢失)·(抽屉总数 - n) / 抽屉总数

则总体概率为P(B|A) = P(文件不丢失)·(抽屉总数 - n) / (抽屉总数 - P(文件不丢失)·n)

代入P(文件不丢失) = 4/5, 抽屉总数 = 8,可得

总体概率P = (4/5)·(8 - n) / (8 - 4·n / 5) = (8 - n) / (10 - n)



推荐阅读
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 在API测试中,我们常常需要通过大量不同的数据集(包括正常和异常情况)来验证同一个接口。如果为每种场景单独编写测试用例,不仅繁琐而且效率低下。采用数据驱动的方式可以有效简化这一过程。本文将详细介绍如何利用CSV文件进行数据驱动的API测试。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
author-avatar
手机用户2502884923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有