`
zhaolei415
  • 浏览: 168854 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

算法与数据结构-小白鼠查毒

阅读更多
有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?


【1】根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。具体实现跟3个老鼠确定8个瓶子原理一样。
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
一位表示一个老鼠,0-7表示8个瓶子。也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,4、5、6、7号瓶子的药混起来给老鼠3吃,哪个老鼠死了,相应的位标为1。如老鼠1死了、老鼠2没死、老鼠3死了,那么就是101=5号瓶子有毒。
同样道理10个老鼠可以确定1000个瓶子
【2】2的10次方=1024,现在先将老鼠排成一列,做一个数列,1表示老鼠是活的,0表示老鼠是死地,做完实验之后这十只老鼠的状态可以有1024种,现在从结果来推断实验方法。因为做实验,我们不算没有老鼠死亡的那一种情况,然后
第一种1000000000情况表示1号老鼠死亡,其他存活,这是第一瓶有毒的结果,因此第一瓶液体只给编号为1的老鼠喝,
第二种0100000000情况表示1,2号老鼠死亡,其他存活,这是第二瓶有毒的结果,因此第二瓶液体只给编号为2的老鼠喝,
同理类推,用排列组合的方法继续。
这是用可能结果确定怎么做实验,现在根据上面的做实验,就可以推出结果了。

推演题:
问:如果你有两个星期的时间(换句话说你可以做两轮实验),为了从1000个瓶子中找出毒药,你最少需要几只老鼠?注意,在第一轮实验中死掉的老鼠,就无法继续参与第二次实验了。
答:7只老鼠就足够了。事实上,7只老鼠足以从 3^7 = 2187 个瓶子中找出毒药来。首先,把所有瓶子从0到999编号,然后全部转换为7位三进制数。现在,让第一只老鼠喝掉所有三进制数右起第一位是 2 的瓶子,让第二只老鼠喝掉所有三进制数右起第二位是2的瓶子,等等。一星期之后,如果第一只老鼠死了,就知道毒药瓶子的三进制编号中,右起第一位是2;如果第二只老鼠没死,就知道毒药瓶子的三进制编号中,右起第二位不是2,只可能是0或者1……也就是说,每只死掉的老鼠都用自己的生命确定出了,三进制编号中自己负责的那一位是2;但每只活着的老鼠都只能确定,它所负责的那一位不是2。于是,问题就归约到了只剩一个星期时的情况。在第二轮实验里,让每只活着的老鼠继续自己未完成的任务,喝掉它负责的那一位是 1 的所有瓶子。再过一星期,毒药瓶子的三进制编号便能全部揭晓了。
总结:n只小白鼠和t周的时间可以从(t+1)^n个瓶子中检验出毒药(一瓶)来。(是否是“至多”(t+1)^n瓶希望你们能想个法子证明或证伪:P)
分享到:
评论
1 楼 aa510600102 2012-06-26  
第二种0100000000情况表示1,2号老鼠死亡,其他存活,这是第二瓶有毒的结果,因此第二瓶液体只给编号为2的老鼠喝,
这句话太深奥了啊,理解不聊麻烦LZ帮帮解释一下哈

相关推荐

    经典数据结构算法c语言实现代码(大全)

    小白鼠钻迷宫.txt 带头结点双链循环线性表.txt 平方根.txt 建树和遍历.txt 建立链表1.txt 扫描码.txt 挽救软盘.txt 换位递归.txt 排序法.txt 推箱子.txt 数字移动.txt 数据结构.txt 数据结构2.txt ...

    史上最全经典数据结构算法c语言实现代码合集

    小白鼠钻迷宫.txt 带头结点双链循环线性表.txt 平方根.txt 建树和遍历.txt 建立链表1.txt 扫描码.txt 挽救软盘.txt 换位递归.txt 排序法.txt 推箱子.txt 数字移动.txt 数据结构.txt 数据结构2.txt ...

    小白鼠问题C语言代码

    标题中的“小白鼠问题”通常是指一个经典的计算机科学问题,它与递归和回溯算法有关,有时也被称作“N只老鼠的问题”。在这个问题中,有若干只小白鼠(通常为N只)和同样数量的洞穴,每只小白鼠必须进入一个不同的...

    洪水填充算法求解小白鼠走迷宫问题

    参考电脑鼠走迷宫竞赛的检索方法,在不考虑过弯速度,即近似的...相较于穷举求解的方法,洪水填充算法的时间复杂度明显更低,而且对比DFS与BFS算法,这种算法可以一次性得出最优的行进路径,从而达到最优且高效的解法。

    数据结构及算法C语言实现代码集[推荐下载]

    小白鼠钻迷宫.c 扫描码.C 挽救软盘.c 汉字字模.c 神经元模型.c 穷举搜索法.c 简单数据库.c 编程汉字问题.txt 编随机数.c 试题.C 递堆法.C ./单元加: erre2.c erre.c 数组完全单元.c 栈单元加.c ./字符: ...

    数据结构(C语言)代码实例18

    - `小白鼠钻迷宫.txt`:这可能是一个经典的图论问题,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决,这两种算法都是数据结构的重要应用。 4. **教科书资源**:`[数据结构(C语言版)].严蔚敏_吴伟民....

    超级详细的数据结构程序代码集锦

    本资料集锦"超级详细的数据结构程序代码集锦"涵盖了多个经典的数据结构和算法实现,以C语言编写,包括了汉诺塔、逆阵、小白鼠钻迷宫、神经元模型、编随机数、图形学画线以及网络最短路径的Dijkstra算法等多个主题。...

    广东工业大学22级物联网工程C++数据结构与算法复习资料

    广东工业大学22级物联网工程C++数据结构与算法复习资料,里面包括一张22年真题试卷和楼主自己整理的复习资料,全是期末考点。本人是物联网工程绩点第一的学长,有资料需求可以联系我。

    算法笔记.胡凡(详细书签).zip

    同时,书中会介绍基本的数据结构,如数组、链表、栈、队列、树和图,这些是构建高效算法的基石。 二、排序与查找 排序算法是算法学习中的核心部分,胡凡的笔记详细介绍了冒泡排序、插入排序、选择排序、快速排序、...

    基于STM32的自主式小白鼠饲养机器人控制.pdf

    10. 跨学科知识的应用:文档中提到小白鼠基因与人类的高度同源性,表明该研究具有生物学和医学研究背景,这反映出现代机器人技术往往需要跨学科知识的结合。 通过这些知识点,可以看出该研究项目涉及硬件设计、...

    淘宝2011.9.21校园招聘会笔试题1

    【淘宝2011.9.21校园招聘会笔试题1】主要涵盖了计算机科学与信息技术领域的多个知识点,包括数据结构、算法、操作系统、网络协议、数据库以及编程语言相关的概念。以下是对这些知识点的详细说明: 1. **数据结构**...

    基础算法教案.doc

    在C语言中,这通常需要自定义数据结构和算法,如大整数运算。学习者会了解到如何存储和操作这些大数,以及实现基本的加减乘除运算。 **第三课 排列与组合** 排列和组合是组合数学的基础,常用于解决计数问题。排列...

    2012最新淘宝笔试题目全

    - **知识点扩展**:B-Tree与AVL Tree、HashTable等数据结构在性能和应用场景上的区别。 #### 4. Web服务器检测 - **问题描述**:哪个命令可以用于检测Web服务器是否工作正常。 - **解题思路**:Telnet命令可以直接...

    献给阿尔吉侬的花束——C++poj原题

    北京大学数据结构与算法课程作业代码,供广大学习c++的同学参考与学习

    百度2013校园招聘移动软件研发工程师笔试(北京)

    本次笔试主要涵盖了计算机基础、数据结构、面向对象编程以及算法设计等多个方面的知识。下面将分别对这些知识点进行详细阐述。 首先,精简指令集(RISC)是计算机体系结构的一个重要概念。RISC设计旨在减少指令集的...

    千橡笔试题 人人笔试题!

    1. **最小小白鼠数量**:利用二进制编码,1000瓶水可以用10位二进制表示,每只小白鼠对应一位,24小时内最多可以检测2^10 = 1024种情况,因此至少需要10只小白鼠。 2. **求绝对值和最大连续数字串**:这个问题可以...

Global site tag (gtag.js) - Google Analytics