百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

经典腾讯面试题:小白鼠试毒问题

cac55 2025-03-05 13:43 16 浏览 0 评论

编辑导读:有100瓶药水,其中一瓶是毒药,只要一小滴,就足以让小白鼠24小时内死亡。请问怎么在1天内用最少的老鼠找出这瓶毒药?本文作者对此进行了解答,一起来看看吧。

这是一道非常经典的腾讯面试题,可能对于程序猿来说并不陌生,但是对于第一次看到这道题的同学来说,确实会比较烧脑。今天除了讲解这道题如何解,更多的是希望给大家引入信息论的概念,那么以后不管是遇到试毒药还是称球重这类问题,都是小case啦!

可能有人会说,我用100只小白鼠就可以知道毒药是哪瓶了,所以小白鼠是招你还是惹你了,非要搭上一整个家族来给你找毒药?其实这个问题答案很简单,我们只需要7只小白鼠就够了,而这个问题的解题关键就是数学编码中的二进制。

一、如何用7只小白鼠找毒药 — 二进制编码

Step1:我们对100个瓶子进行1~100号的编码,再转化为7位的二进制码(至于为什么是7位,看到后面你就懂了)。比如1号瓶子就转化为了“0000001”,10号瓶子就转化为了“0001010”:

Step2:找来7只小白鼠,分别对他们进行1~7的编号。对于编号是1的小白鼠,喂它所有二进制编码第1位(从左到右数)为1的瓶子;对于编号2的小白鼠,喂它所有二进制编码第2位(从左到右数)为1的瓶子;以此类推…

Step3:接下来就是看一天后哪几只老鼠挂了:如果某个编号的老鼠死了,那说明毒药瓶子的二进制编码在对应编号位置上的二进制值是1;反之如果某个编码的老鼠没有死,那说明毒药瓶子的二进制编码在对应编号位置上的二进制值是0。假如最后是2,3,5,7号老鼠挂了,那说明对应的毒药瓶子二进制编码是“0110101”,转化成十进制,即第53号瓶子是毒药。

二、为什么至少是7只小白鼠?— 信息熵

前面我们只说明了7只小白鼠是可以完成找毒药这件事情,但是我们并没有证明7只就是最优解,那要论证这个答案就要引入信息论中的“信息熵”这样一个概念。

首先,我们先来了解下“熵”:

在信息论中,熵的概念和热力学中的熵是类似的,如果大家还记得高中化学,里面有提到一个“混乱度”的概念,其实熵在热力学里指的就是系统的混乱度,大概应该还记得“任何化学变化或者化学反应都是往熵增加的这个方向进行”这句话吧。

热力学熵:系统的混乱程度

信息熵:信息的不确定性的度量

而在信息论中,熵指的是信息的不确定性,也就是说信息的不确定程度越大,那么对应的信息熵的也就越大,其实数学的本质就是消除信息中的这种不确定性。

对于抛硬币来说,每次要猜正反面只能靠瞎猜,正反面出现的概率都是1/2,对于这类事件来说其不确定性较大,信息熵也会相对较大;如果让你猜国足拿世界杯冠军的可能性,那这种小概率事件的不确定性就比较小了,信息熵相对来说就会很小。

在信息论中,常用的几个概念也可以给大家定义下,避免混淆:

1、信息熵:用来度量信息不确定性程度的大小,是一个绝对的值。(至于具体怎么计算度量,后面介绍)

2、信息:凡是在一种情况下能减少信息的不确定性的任何事物,都可以叫信息,它的反义词可以理解为是“废话”

3、信息量:是对信息的度量,表示某个具体事情发生后带来的信息的多少,是个相对值。事件发生的概率越低,当事件发生了以后带来的信息越大,说明信息量越大;反之越高概率事件的发生,其产生的信息量就越小。比如某明星出轨的消息被爆出来,而之前他在大众面前的人设是个极品好男人,那么这则消息的信息量就非常大了。

接下来,回到“信息熵”如何计算度量:

信息量度量的是一个具体事件发生了所带来的信息,而熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。

所以香农给了我们一个这样的公式(划重点!):

P为X的概率质量函数(probability mass function),我们可以理解为事件xi 发生的概率。

b是对数所使用的底。当b = 2,熵的单位是bit。

我们用抛硬币来举例,“抛一次硬币是正面”这个随机变量X的信息熵为

也就是“抛一次硬币是正面”这个事件的信息熵是1 bit,我们也就只需要用1位二进制的数字即可以表示这个信息的大小(0或者1)

#开始解题# 计算小白鼠找毒药中的信息熵:

1、首先,”100瓶药水其中有1瓶有毒“这个随机变量X的信息熵为:

2、1只小白鼠喝水以后的要么活着,要么死去,一共有两种状态,所以”1只小白鼠喝完水以后的状态“这个随机变量Y的信息熵为:

3、n只小白鼠喝完水会有2^n种状态,即”n只小白鼠喝完水以后的状态”这个随机变量Z的信息熵为:

所以根据题目,要用到最少的老鼠来找到那瓶毒药,转化为信息熵就是要满足:

H(Z) >= H(X),即n >= 6.64

那么n的最小值是7,也就是说最少要7只老鼠可以找到毒药

其实,上面的熵计算如果你觉得复杂的话,也可以这么简化来理解:

1只小白鼠活着或者死了,可以代表两种状态,n只小白鼠就代表2^n种状态

而毒药存在1~100号瓶子中的某一瓶对应了100种情况

也就是我们需要找到最小的n满足:

2^n>= 100,即n>=7

三、挑战下高阶版的试毒问题

仔细审题,我们发现这次小白鼠6小时内就会挂掉,题目没有说具体是什么时候会挂,那我们可以理解为:喝了毒药最久6小时会挂,如果6个小时还没挂,说明这瓶水不是毒药。

1、首先,还是”100瓶药水其中有1瓶有毒“这个随机变量X的信息熵为:

2、而这次,小白鼠的状态有点不一样,他在喝完水1天内的状态可能是:

1)在第0分钟的时候喝了一滴水以后,第6小时死去

2)第6小时依然活着,喝了一滴水以后,第12小时死去

3)第12小时依然活着,喝了一滴水以后,第18小时死去

4)第18小时依然活着,喝了一滴水以后,第24小时死去

5)第6小时依然活着,喝了一滴水以后,在第24小时依然活着

可见一只小白鼠在喝了一整天水后,可能会出现的状态有5种,所以”1只小白鼠喝完水24h以后的状态“这个随机变量Y的信息熵为:

3、n只小白鼠喝了一整天水后就会有5^n种状态,即”n只小白鼠喝完水24h以后的状态”这个随机变量Z的信息熵为:

所以根据题目,要用到最少的老鼠来找到那瓶毒药,转化为信息熵就是要满足:

H(Z) >= H(X),即 2.3219n >= 6.64

那么n的最小值是3,也就是说最少要3只老鼠可以找到毒药

留个作业:那具体怎么利用这3只小白鼠找到毒药呢?

根据前面简化版本的二进制编码方式的思路,我们是不是可以利用小白鼠的5种状态构造一个5进制编码方式呢?

四、我是总结

其实小白鼠试毒这个问题,第一次遇到确实会比较难下手,对于做过的人来说,可能大部分人也仅仅停留在知道用二进制编码的方式解决,很少会有人去思考这背后的原理和逻辑的本质

如果把问题变得再复杂点,往往大部分人就会去试,7只小白鼠不行就8只小白鼠,反正只知道用编码的方式,这就是知其然而不知所以然。同样的,当我们仅仅掌握了许多理论知识,但是缺乏应用场景的实操以及面向各种情况的修正与优化,最终也将是纸上谈兵。

所以,这也是我个人比较推崇的一种思考方式:当我们遇到一个好玩的问题以及巧妙的解决方法的时候,我们可以继续去深挖背后的原理和逻辑的本质,再反推更多的应用场景,做到举一反三,这样才能不断的锻炼自己思维能力的广度和深度。

本文由 @WINTER 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Pexels,基于CC0协议

相关推荐

如何屏蔽色情网站?_怎么能屏蔽网站

一、基础防御:全网DNS劫持阻断1.修改全网DNS服务器推荐DNS:安全DNS:CleanBrowsing(成人内容过滤):185.228.168.168/185.228.169.168Open...

容器、Pod、虚拟机与宿主机网络通信全解:看这一篇就够了

在日常开发与部署过程中,很多人一开始都会有这样的疑惑:容器之间是怎么通信的?容器怎么访问宿主机?宿主机又如何访问容器?Kubernetes中Pod的网络和Docker容器一样吗?容器跨机器是...

Win11专业版找不到共享打印机的问题

有很多深度官网的用户,都是在办公室上班的。而上班就需要使用打印机,但更新win11系统后,却出现同一个办公室里面的打印机都找不到的问题,这该如何处理呢?其实,可能是由于我们并没有打开共享打印机而造成的...

常用电脑快捷键大全,摆脱鼠标依赖,建议收藏

Ctrl+C复制Ctrl+X剪切Ctrl+V粘贴Ctrl+Z撤销Ctrl+Y重做Ctrl+B加粗Ctrl+A全选所有文件Ctrl+S保存Ctrl+N新建Ctrl+O打开Ctrl+E...

Win11实现自动追剧Jellyfin硬解,免NAS复杂操作

大家好,欢迎来到思赞数码。本期将详细介绍如何通过安装和配置Sonarr、Radarr、Prowlarr、qBittorrent和Jellyfin,打造一套自动化的影视管理系统。很多人认为,要实现自动追...

微软Win11安卓子系统WSA 2308.40000.3.0更新推送下载

IT之家9月21日消息,微软官方博客今日宣布,已面向所有WindowsInsider用户推送了Windows11安卓子系统的2308.40000.3.0版本更新。本次更新和之前...

路由器总掉线 一个命令就能猜出八九分

明明网络强度满格或有线图标正常,但视频卡成PPT、网页刷不开、游戏动不了,闲心这些问题很多小伙伴都碰到过。每次都要开关路由、宽带/光猫、插拔网线……一通忙。有没有啥办法能快速确定故障到底在哪儿,方便处...

windows电脑如何修改hosts文件?_windows怎么修改hosts

先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...

win10广告弹窗ShellExperienceHost.exe

win10右下角老是弹出广告弹窗,排查为以下程序引起,但是这个是系统菜单的程序不能动:C:\Windows\SystemApps\ShellExperienceHost_cw5n1h2txyewy\S...

Win10 Mobile预览版10512/10166越狱解锁部署已被黑客攻破

看起来统一的WindowsPhone和Windows越加吸引人们的关注,特别是黑客们的好奇心。XDA论坛宣称,在Win10Mobile预览版10512/10166上,已取得越狱/解锁部署突破,比如可...

6款冷门小众软件,都是宝藏,建议收藏

真的很不错(。-ω-)zzzBearhttps://bear.app/cn/Bear是一个漂亮,灵活的Markdown的写作工具。它一样只支持苹果家的全平台。它一出现就惊艳四方,就被AppSto...

如何让不符合条件的设备升级Windows 11

如果你是最近(6月24日之后)加入WindowsInsider项目并且你的设备并不符合升级条件,那么当你在尝试升级Windows11的时候可能会看到以下错误:你的PC不符合Wi...

windows host文件怎么恢复?局域网访问全靠这些!

windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...

Mac Hosts管理工具---SwitchHosts

switchhosts!formac是一款帮助用户快速切换hosts文件的工具,switchhosts!formac能够帮助你快速方便的打造个人专用的网络环境,支持本地和在线两种方式,并且支持...

「浅谈趣说网络知识」 第十二弹 老而不死的Hosts,它还很有用

【浅谈趣说网络知识】第十二弹老而不死的Hosts,它还很有用什么时候才觉得自己真的老了,不是35岁以上的数字,不是头上的点点白发,而是不知觉中的怀旧。风口上的IT界讲的就是"长江后浪推前浪...

取消回复欢迎 发表评论: