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时的正解。
查看全文
相关阅读:
弹弹弹,走到哪里弹到哪里 —— 关于上海电信强制弹窗广告
对Live Writer支持的继续改进:设置随笔地址别名(EntryName)
【公告】6月20日0:00~1:00(今天夜里)机房网络设备调整
上周热点回顾(6.46.10)
[功能改进]Live Writer发博支持“建分类、加标签、写摘要”
上周热点回顾(6.186.24)
上周热点回顾(6.116.17)
[转].NET 绘制 EAN13 (商品条码)
[转]C#连接操作mysql实例
[转]MySQLHelper类
原文地址:https://www.cnblogs.com/kingbk/p/8675228.html
最新文章
软件史上最伟大的步调员之Linux之父
Solaris 10 体系维护
Intel将推基于OpenSolaris多线程启示对象
实战Solaris 10
SAS贸易智能在Solaris 10上不乱运转
不错的音乐播放及治理软件——Banshee
新手上路五:选择宽带上网线路
把流中的字符串转换为 UTF 格式 回复 "lostapple" 的问题
重写了博客上的代码着色脚本
Net 3.5 类库列表
热门文章
C# 语法练习(2): 字符转义
看看盛大的小伙子们
关于 TStringList.Assign 回复 "u9cm" 的问题
C# 语法练习(1): 基本数据类型
给 C# 代码动态着色的 JavaScript 脚本
从 EXE 或 DLL 中获取图标的函数 回复 "小李子子" 的问题
遍历进程并获取进程路径 回复 "编程少年" 的问题
究竟是谁弹出的窗
博问智能手机网页版上线测试,欢迎大家试用、反馈
发布Live Writer代码着色插件CNBlogs.CodeHighlighter
Copyright © 2011-2022 走看看