| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 经典问题 小白鼠试毒药 这个算法你绝对不知道 -> 正文阅读 |
|
[数据结构与算法]经典问题 小白鼠试毒药 这个算法你绝对不知道 |
问题有1000瓶液体,其中1瓶是毒药,其余的都是水,小白鼠喝了之后一个小时才会生效,问怎样用较少的时间和较少的小白鼠找出这瓶毒药呢? 1000个小白鼠,1个小时?或者1只小白鼠,1000个小时?显然都不是 有一个直观的办法,假如有9个小白鼠,我们把1000瓶药分为10份,每只小白鼠吃一份,这样一次过后就可以把范围缩小到100瓶药,继续实验 但以上均不是最优的办法,其实只需要10只小白鼠,1个小时就可以了! 下面看讲解:我们可以利用二进制很好地解决这个问题! 那么死掉的老鼠代表的二进制位就是1,没死掉的就代表0! 再用一个结果举个例子,假如第八、九、十只老鼠死了,那么代表的二进制为0000000111,可以推出有毒的液体编号是7 是不是很神奇呢!等等!这个问题还没有解决呢! 进阶知识请读者先理解好上面的讲解再继续看下去哈,防止懵逼! 那么问题来了,上面解读的是1次实验,10只小白鼠,那么假如进行两次实验,至少需要多少只小白鼠呢?答案是七只 两次实验,问题又来了!二进制不能用,那么用三进制! 同样地,我们给1000瓶药按999,998,997,996…,3,2,1,0编好号 比如: 哪只小白鼠死掉了就代表对应位三进制的值为2 第二次实验 同样的道理,哪只小白鼠死掉了就代表对应位三进制的值为1 进制位值为2、1的都测出来了,0的就没必要测了; 举个例子,6、7号小白鼠第一天死了,3、4号小白鼠第二天死了,那么毒药三进制表示为0011022,可以推出有毒的液体编号是116 当然了,三次实验的就要用四进制了,每次实验就验证一个四进制值就可以了,小白鼠的数量就是进制的最大位数啦! 知识总结根据以上解读,知道小白鼠数量和实验次数的关系了吧! 计算公式就是: 小疑惑: 2、这是最优的解法吗? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:45:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |