zoukankan
html css js c++ java
小白鼠问题(海明码)
小白鼠问题(海明码)
同学问了一道智力题:30瓶水,其中有一瓶毒药,小白鼠喝了毒药之后一天会死,求只有一天时间,用最少的小白鼠找出毒药?
很简单的我就想到了海明码:
数位
数值
C1
00001
C2
00010
C4
00100
C8
01000
C16
10000
(C1=A1⊕A3⊕A5...⊕A29)
(C2=A2⊕A3⊕A5...⊕A30)
(C4=A4⊕A5⊕A5...⊕A30)
(C8=A8⊕A9⊕A10...⊕A30)
(C16=A16⊕A17⊕A518.⊕A30)
我们将A看作水,将水从1编号到30。C作为混合水,也就是将对应编号的水混合成5瓶水,对应C16C8C4C2C1。每瓶水用一只小白鼠实验(残忍),哪只死亡,哪只对应编号为1。例如,C8,C4死亡,那么对应二进制数为0110,也就是十进制12,代表12号水有毒。
如果推广到n瓶水呢?当:
$$2^x-1>=n$$
时,可以满足需求。即:
$$x>=log_2 (n+1)$$
所需小白鼠数量为大于等于以2为底n+1的对数的最小整数。
但是这个是使用一切情况吗?当n=1时,x=1。但是实际上,一杯水不需要验证,他就是有毒的。所以我发现当:
$$n=2^x$$
时是一种特殊情况。例如,当n=32时,我可以把标号为32的水拿出,剩余31瓶可以按照如上方法求出答案,只是多出一种00000的情况,说明前31瓶水都无毒。那么拿出的32号水肯定有毒!
所以正确的公式应为:
$$2^x>=n$$
即:
$$x>=log_2 n$$
所需小白鼠数量为大于等于以2为底n的对数的最小整数。这是推广到n时的正解。
查看全文
相关阅读:
posix多线程有感POSIX 线程间的内存可视性
同步和互斥的一些问题(死锁,优先级逆转)
POSIX线程属性
POSIX 条件变量详细解析
VMware网络配置详解
POSIX线程
Java+Selenium——Actions鼠标悬停
Java+Selenium——截图方法TakeScreenshot——保存到桌面——TakeScreenshot截图只针对浏览器的web事件
Java+Selenium——利用Robot类截图——整个桌面截图
Java+Selenium——如何处理日历控件——方法二
原文地址:https://www.cnblogs.com/kingbk/p/8675228.html
最新文章
pig中distinct用法
vim中设置pig高亮
which与whereis区别
DataGridView 取得或者修改当前单元格的内容
C# DataGridView中实现类似ComboBox可编辑的下拉框
未将对象引用设置到对象的实例可能出现的问题总结
Which Numbers are the Sum of Two Squares?
系统分析,业务建模,UML,RUP相关的一些问题和回复
TBODY 标签有什么作用 潇湘
The four number game
热门文章
分享一种便利的短信方式 潇湘
jQuery工作原理解析以及源代码示例 潇湘
潇湘博客 有GOOGLEPR值了 潇湘
《大象Thinking in UML》读者专用反馈、答疑、讨论贴
分解质因数一例
前n个自然数的阶乘之和(单数,双数,全部)
VMware设置桥接上网
同步和互斥的POSIX支持(读写锁、信号量和记录锁)
进程及相关API
同步和互斥
Copyright © 2011-2022 走看看