信息熵--硬币称重问题-详解
在补《信息熵基础》,此书理论清晰,后面还有一堆要命的习题,加深理解和应用,实乃佳作。其中一些题目对我来说确实不易,记录巩固一下,也和大家交流一下。
顺便补一下,一份完整的参考资料或者书籍,应该包括两部分:1. 内容讲解,2. 作业习题及其标准答案。对于作者和读者,习题均能够加深理解和应用。
信息熵是这类问题硬币称重或者小球称重,或者天平称重的一种通解,学习下还是很有用的。利用信息熵指导不仅能回答是否能够,而且可以指导如何构造称重方案。
文章目录
- 一、硬币称重(小球称重)问题描述
- 二、解答
- 2.1第一问
- 2.2第二问,穷举版答案
- 2.2.1第一次称重方案
- 2.2.2 最后一次称重方案
- 2.2.3 第二次称重方案
- 2.2.3.1 相等
- 2.2.3.2 不相等
- 2.2.3.2.1 单堆独取
- 2.2.3.2.2 双堆混取
- 三、延伸题目
- 四、总结
- 五、参考文献
一、硬币称重(小球称重)问题描述
n枚硬币,可能有一枚假币,也可能没有。假币可能较重,也可能较轻。使用天平k次,确定n枚中是否有假币,如果有找出假币。(天平不是那种有砝码和游码的天平)
- 对于每个k来说,n最大为多少?
- n为12时,求k=3的称重方案。
二、解答
2.1第一问
对于每个k来说,n最大为多少?也就是k次称重最多可以排除多少信息不确定性。这个简单,一次称重最大可以确定的信息量为x,那么k次可以减少的总信息量为kx。我们在计算n枚硬币,总的信息量是多少,就可以求解此问。详情如下:
- 每次称重,只有三种可能结果(左重,相等,左轻)。在三种情况的可能性都是13\frac{1}{3}31时,信息熵最大,也就是能够较少的不确定性最大。为:
H(X)=−13log213−13log213−13log213=log23H(X) = -\frac{1}{3}log_2\frac{1}{3}-\frac{1}{3}log_2\frac{1}{3}-\frac{1}{3}log_2\frac{1}{3}=log_2{3}H(X)=−31log231−31log231−31log231=log23
这是因为信息熵在每种结果等可能出现的情况下,熵值最大。这也符合直觉。比如影视剧中,赌骰子时,往往有骰子有铅的桥段。这是因为正常的骰子,6面均等出现,不确定性大,难以猜对。加铅后,某一面出现的概率变大,不确定性减少,出千的人非常容易猜对。 - n枚硬币,编号为1~n。硬币的轻重可能的情况有3类(详情如下),共2n+1种情况,每种情况发生概率相等,概率为12n+1\frac{1}{2n+1}2n+11,故信息量为log2(2n+1)log_2{(2n+1)}log2(2n+1)。
- 无假币,它是1种情况。
- 有1枚轻假币,1~n都可能是这枚假币,故n种情况。
- 有1枚重假币,同上也是n种情况。
- 总得来说,每次使用天平可以减少的最大信息量为log23log_2{3}log23,所以对于n枚硬币需要使用的天平次数为⌈log2(2n+1)/log23⌉\lceil log_2{(2n+1)}/log_23 \rceil⌈log2(2n+1)/log23⌉
2.2第二问,穷举版答案
配合信息熵,我们可以详细推敲k=3的称重方案。接下来详细讨论:第一次,第二次和最后一次称重的方案。下文内容比较简单,但是文笔水平有写的较啰嗦,简单问题复杂化(因为我的写作目的是通俗易懂详尽)。如果大家有什么想不明白的,建议纸上用二叉树模拟一下。
还有三点基本信息,希望大家记得:
- 如前面提到过的那样,当均分时,信息熵是最大的,不确定性是最大,对于天平来说就是可以排除的不确定性最大。所以,分堆的原则应该是尽可能地每堆数量均衡。
- 另外,每次称重时,左右两边珠子数目应该一样,这很明显。
- 对于N个小球找到缺陷球,m次称重是否能行,比较log2(N∗2+1)log_2(N*2+1)log2(N∗2+1)与mlog23mlog_23mlog23的大小即可确定方案是否可行。所以在构造方案的时候,每次分堆后都可以用上面的公式检验一下。所以是一个递归的过程。
2.2.1第一次称重方案
第一次称重后,可用机会为2次,由于2次称重可以确定的信息量为2log232log_2{3}2log23,故第一次称重后硬币的信息量应该小于等于这个值,否则方案失败。
按照第一个基本信息,我们很容易得出第一次称重方案为三堆,每堆四个,即(4, 4, 4),如果存在多种解决方案那么这种方案是最合理的方案,如果只存在一种方案,那么这是唯一解。穷举讨论所有的分堆情况,如下:
- 分为两堆,当一堆多一堆少时,无法放在天平上称重。
- 当分为(6,6)两堆时(每堆为6个币,下同),方案也不可行,一个反例是:称重后,如果不相等,那么必定一堆6枚中有一枚重假币或者另一堆6枚中一枚轻硬币,信息量为log2(6+6)log_2{(6+6)}log2(6+6),大于2log232log_2{3}2log23,故不正确。
- 分堆为(5,5,2)三堆时,称重后,如果不相等,那么信息量为log210>2log23log_2{10}>2log_2{3}log210>2log23,故不正确。
- 分堆为(4,4,4)三堆时,称重后,如果相等,那么只用再测第三堆,此时信息量为log2(2∗4+1)=2log23log_2{(2*4+1)} = 2log_2{3}log2(2∗4+1)=2log23。如果不相等,那么第三堆均为正常硬币,前面两堆需要称重,此时为信息量为log28<2log23log_2{8} < 2log_2{3}log28<2log23。方案可行。
- 分堆为(3,3,6)三堆时,一个可能的反例是:第一次称重,3和3两堆平衡,那么剩下的6个硬币中,可能有:有偏重的假币(每个硬币都有可能,6种情况),有偏轻的假币(每个硬币都有可能,6种情况),没有假币(一种情况)三大类情况,信息量为log2(2∗6+1)>2log23log_2{(2*6+1)} > 2log_2{3}log2(2∗6+1)>2log23。所以不行,那么同理(2,2,8)、(1,1,10)更不行。
- 分堆大于3堆的情况可以等价3堆的情况,故不讨论。比如(2,2,4,4)可以合并为(4,4,4)或者(2,2,8)。
所以第一次称重方案有唯一解为:(4,4,4),这和我们的第一条基本信息是符合的。
2.2.2 最后一次称重方案
第二次称重方案比较难想出来,而第二次称重后,剩余的信息量应该小于等于log23log_2{3}log23,情况少利于讨论分析。第二次可能称重方案非常多。所以,先推定最后一次称量方案,然后借此反推构造第二次的方案。
一些术语声明:
########################################################################
#声明:一硬币是偏轻的假币,称轻假币,偏重的假币,则是重假币。
#声明:一硬币要么是真币,要么是重假币,即潜在地可能是重假币,称潜重假币。
#声明:一硬币要么是真币,要么是轻假币,即潜在地可能是轻假币,称潜轻假币。
#上述两类概念下面会经常用到,易混淆,务必记清。
########################################################################
设,最后一次称重时,仍需要考虑硬币数为x:
- x=1,详情见下表。
项目 | 内容 |
---|---|
定义 |
前k-1次称重后,这枚硬币最多有三种情况:正常,重假币和轻假币。 不确定性为log23log_2{3}log23。 |
一个真实场景 | 其它硬币都已确定为真币,而这枚币没有上过天平,或者上了天平但是没判断出来。 |
称重方案 | 只需与真币再比较就可以确定其身份。 |
- x=2,详情见下表。
项目 | 内容 |
---|---|
定义 |
前k-1次称重后: 1. 如果有无假币不可知,那么信息熵为log2(2∗2+1)log_2{(2*2+1)}log2(2∗2+1),方案失败。 2. 如果有假币且不知轻重,信息熵为log2(2+2)log_2{(2+2)}log2(2+2), 方案失败。 3. 如果有假币且知轻重,信息量为log22log_2{2}log22,可行。 |
称重方案 | 有假币且知轻重,只需要两枚任取一枚与真币比较即可。 |
- x=3,详情见下表。
项目 | 内容 |
---|---|
定义 | 前k-1次称重后,其他均为真币,这三枚硬币必定只有有一枚假币,如果是假币那么已经知道他的轻重。此时信息量为log23log_2{3}log23。 |
一个真实场景 |
三枚硬币1,2,3,1为重假币,2为轻假币,3为轻假币。 此时可能情况有:1真2真3重(硬币1和2是真币,硬币3为重假币),1真2轻3真,1轻2真3真。 其他场景不计其数,不一一列举。 |
解决方案 |
此时取两枚同重量的假币(比如均为轻假币),使用天平称量。 1. 天平平衡,则第三枚为真的假币。 2. 天平不平衡,两枚中的有一枚假币,视情况判断假币(两枚均可能为轻假币的相比较,较轻的为轻假币)。 |
- x >= 4,这种情况下,信息熵无论如何都会大于log23log_2{3}log23,所以方案一定失败。
在上述讨论中,对每种x的取值我们只讨论了不确定性最大的情况,或者说硬币可能的真假轻重种类数量最多的情形,也就是最坏的情况。这是因为最后一次称重确定的不确定性越大,第二次称重需要面对的情况越简单。如果存在可行方案,那么符合这种情况的方案一定是其中一种,或者唯一的一种。
最后一次称重时,必定出现x=1,2,3的情况的任意一种。换句话说,第二次称重一定要导致上面三种情况出现一种。也就是,第二次的称重方案,是由这三种情况组合而成的。另外,在构造时候,优先考虑使用x=1和3的情况,因为信息熵大,排除的不确定性更大,组合出来的方案更加容易成功。
2.2.3 第二次称重方案
第一次称重时从(4,4,4)三堆,任取两堆称重,结果为:两堆相等和不相等两种情况。
2.2.3.1 相等
说明这称重过的两堆是正常硬币(真币可以拿来做判断标准),第三堆有嫌疑,四枚硬币编号为1234。
尝试构造方案,使x=1发生。拿硬币1放在一边不参与此次称重,对234进行称量。如果要使x=1发生,那么要判定这三枚为真币,也就是从另两堆中拿3枚真币与他们称量。讨论如下:
天平状态 | 解决方案 |
---|---|
天平平衡 | 234为真币,则x=1发生,方案可行。 |
234比较重 | 硬币1为真币,则x=3发生,方案可行。 |
234比较轻 | 硬币1为真币,则x=3发生,方案可行。 |
综上所述,方案成功。 |
2.2.3.2 不相等
说明第三堆为真币(真币可以拿来做判断标准),天平上较轻的那堆硬币编号为abcd,较重的那堆编号ABCD。abcd中可能有一枚轻假币,也可能都是正常的,故abcd是潜轻假币。同理ABCD是潜重假币。下面讨论方案构造。
尝试构造方案,使x=1发生。由于abcdABCD每枚硬币只可能有两种状态,故它们每个的信息熵为log22log_2{2}log22,如果最后只剩下一枚硬币待确定,信息熵为log22log_2{2}log22。由于这种方案可以确定的信息量少于n=12的信息量,所以方案不可行。具体如下公式:
log2(2∗12+1)=4.6438>log2(3)+log2(3)+log2(2)=4.169925log_2(2 * 12 + 1) = 4.6438 > log_2(3) + log_2(3) + log_2(2) = 4.169925 log2(2∗12+1)=4.6438>log2(3)+log2(3)+log2(2)=4.169925
尝试构造方案,使x=3发生。要使x=3发生,需要拿走三枚硬币第三次称重,再补1枚真币@,然后均分两堆。只有如下两种拿法。
- 单堆独取 从某堆拿3个硬币。比如,拿走abc三枚硬币,补上@和ABCD任意一枚,两堆可能是方式如d@A和BCD,或者d@C和ABD。
- 双堆混取 一堆取2枚硬币,另一堆取1枚,补@,分两堆。比如,拿走abA或者ABa。
拿走3个硬币后,如何分堆是一个难题。
2.2.3.2.1 单堆独取
这种方案可行。具体如下:
以实际例子讲解,从abcd中拿走abc时,abc为一堆,不参与此次称重。补硬币@后,方案有两种:分堆dA@和BCD,另一种是dAB和CD@。
分堆dA@和BCD,天平情况如下:
天平状态 | 解决方案 |
---|---|
天平平衡 | dABCD均为真币,x=3发生。方案可行。 |
dA@较重 | A一定是较重的假币。方案可行。 |
dA@较轻 | A是真币,abc也是真币,dBCD需要重新度量,但是信息熵为log24>log23log_2{4}>log_2{3}log24>log23,方案不可行。 |
分堆为dAB和CD@,讨论如下: | |
天平状态 | 解决方案 |
----------- | :----------- |
天平平衡 | dABCD均为真币,x=3发生,可行。 |
dAB较重 | AB中一定有一枚较重的假币,x=2发生,可行。 |
dAB较轻 | AB是真币,abc也是真币,d是潜轻假币,CD是潜重假币,dCD中定有假币,x=3发生,此时余下的信息熵为log23log_2{3}log23,可行。 |
综上所述,单堆独取可行。
2.2.3.2.2 双堆混取
- 当拿走硬币abA,做x=3的情况,做第三堆。补真币@,均分两堆cBC和dD@,天平情况如下:
天平状态 | 解决方案 |
---|---|
天平平衡 | cdBCD均为真币,x=3发生,方案可行。 |
cBC较轻 | BCd一定真币,abA也是真币,cD中一定有一枚的假币,x=2发生,方案可行。 |
cBC较重 | cD是真币,abA也是真币,BCd中有假币,x=3发生,方案可行。 |
三、延伸题目
本科时听过一道很有名的面试题目(听说是微软面试题,也可能是google的):
8个小球(外观一模一样),其中一枚小球比较轻,使用两次天平,请找到此小球。请设计方案
变种:8个小球(外观一模一样),其中一枚缺陷小球,不知道是略轻还是略重,使用两次天平是否可以找到此球?
当时听到了这个题目,感觉解法很巧妙,记住了,但是各种变种问题,碰到就死。直到学了信息论才恍然大悟,相见恨晚。不由得感叹:只会解一题是野路子,会解一个系列,才是科班出身。下面解答一下:
- 很明显,8个小球,其中一个轻,不确定性(信息熵)为log28log_2 8log28,而两次天平称重可以提供的信息量为log29log_29log29,所以应该存在这样的方案,而且由于信息量相差不大,所以很悬,如果存在的话只有一种解法。
- 第一次称重,分两堆(4, 4),第二次称重时无法解决剩下的4种情况。故第一次称重只能是,分三堆(3,3,2),这样即可满足情况。
变种问题中,不确定性为log2(8+8)log_2(8+8)log2(8+8),超出两次天平测量的能力范围,故无法找出此球,至少需要三次称量(log227>log216log_2{27} > log_216log227>log216)。寻找方法类似。
四、总结
题目解法不唯一,利用信息熵可以做理论指导。称重方案可以使用二叉树的形式来表示,那么此时利用信息熵可以做剪枝优化操作。
鸣谢女朋友,她想出第一条具体的解决方案,上述的想法也是在她想出方案后我经过总结思索出来的。
另外想说的是,有指导武器的时候,要相信数据多做尝试,而不是相信自己的直觉。
五、参考文献
- 信息论实验-称硬币
信息熵--硬币称重问题-详解相关推荐
- 电石双向无人值守称重系统功能详解
无人值守称重系统要实现车辆行驶控制.称重数据的采集.过衡车辆的视频显示和抓拍.灵活多样的磅单和报表定制.准确快捷的数据查询等功能.能够满足不同场合的称重需求,提高称重操作的工作效率. 1.满足系统的个 ...
- 地理坐标系、大地坐标系与地图投影与重投影详解
地理坐标系.大地坐标系与地图投影与重投影详解 基本概念 首先简单介绍一下地理坐标系.大地坐标系以及地图投影的概念: 地理坐标系:为球面坐标. 参考平面地是椭球面,坐标单位:经纬度: 投影坐标系:为平面 ...
- Android的ELF文件重定位详解,包括64位
0x01 引言 ELF文件格式,主要基于两种,一种是基于链接视图,链接视图即是基于节(Section)来进行解析,一种是基于执行视图,执行视图即是基于段(Segment)来进行解析.前一种是用于静态分 ...
- 12枚硬币称重问题(面试)
问题描述: 12枚硬币,其中11枚真币1枚假币,现有一架天平,最少称多少次可以找出这枚假币并且知道假币和真币的相对重量. 答案是三次,称重过程描述如下. 第一步:分组,分三组,1 2 3 4为一组,5 ...
- 51单片机电路原理图_HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理图、论文等...
设计要求 1.系统可实现电子秤基本的称重功能(称重范围为0-10Kg,重量误差不大于±0.005Kg): 2.系统应具备键盘输入单价,显示重量,计算总价的功能: 3.单价和总价金额的单位为元,最大金额 ...
- 出参传递数组指针_C语言指针重难点详解
1为什么使用指针 假如我们定义了 char a='A' ,当需要使用 'A' 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 ...
- 利用结构体数组实现重排序(详解)
一:要求 输入乱序的 成绩单 包括 姓名和成绩,成绩按照递增顺序 输出,如果遇见成绩相同的 按名字的字典序输出. 示例: 输入 5 w 12 a 12 v 7 c 3 e 9 输出: c 3 v 7 ...
- 24. PE结构-PE详解之基址重定位详解
问题一:什么是基址重定位? 答:重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位.打个比方:例如你现在计划在某某地方建 ...
- mysql可重复读和间隙锁_解决MySQL可重复读——详解间隙锁
间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制,(下面的所有案例没有特意强调都使用可重复读隔离级别)幻读的问题存在是因为新增或者更新操作,这时如果进行范围查询的 ...
最新文章
- 使用宝塔面板部署tp5网站
- python多线程处理图片_Python斗图网多线程爬取图片
- Linux中grep命令 常用选项
- HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用
- MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件
- 算法入门篇七 前缀树
- LeetCode 670 最大交换 (暴力+贪心、Python)
- java数字时钟控件_Java-数字时钟(简易版)
- Python函数进阶
- 美团回应遭反垄断调查;腾讯因《地下城与勇士》被抄袭获赔3000万;iOS 14.5 正式版发布|极客头条...
- c读取txt文件内容并建立一个链表_面试官给我挖坑:rm删除文件之后,空间就被释放了吗?...
- 听说现在流行搬电脑回家?云桌面救星来了
- adobe怎么统计字数_pdf文件怎么快速统计字数?
- 电脑上的歌曲怎么传到苹果手机上面,怎么把电脑上的歌导入苹果手机
- 微信小程序 断网异常处理
- 如何把握云计算时代风口 怎么能掌握云计算技术
- 变量foo 和 bar的由来
- Autowired注解起什么作用呢?
- 陪审团(01背包问题倒推具体方案)
- antDesignPro线上刷新404 和 liunx部署使用mock数据 umi-serve + pm2