在补《信息熵基础》,此书理论清晰,后面还有一堆要命的习题,加深理解和应用,实乃佳作。其中一些题目对我来说确实不易,记录巩固一下,也和大家交流一下。
顺便补一下,一份完整的参考资料或者书籍,应该包括两部分: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枚中是否有假币,如果有找出假币。(天平不是那种有砝码和游码的天平)

  1. 对于每个k来说,n最大为多少?
  2. 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)=−31​log2​31​−31​log2​31​−31​log2​31​=log2​3
    这是因为信息熵在每种结果等可能出现的情况下,熵值最大。这也符合直觉。比如影视剧中,赌骰子时,往往有骰子有铅的桥段。这是因为正常的骰子,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}log2​3,所以对于n枚硬币需要使用的天平次数为⌈log2(2n+1)/log23⌉\lceil log_2{(2n+1)}/log_23 \rceil⌈log2​(2n+1)/log2​3⌉

2.2第二问,穷举版答案

配合信息熵,我们可以详细推敲k=3的称重方案。接下来详细讨论:第一次,第二次和最后一次称重的方案。下文内容比较简单,但是文笔水平有写的较啰嗦,简单问题复杂化(因为我的写作目的是通俗易懂详尽)。如果大家有什么想不明白的,建议纸上用二叉树模拟一下。

还有三点基本信息,希望大家记得:

  1. 如前面提到过的那样,当均分时,信息熵是最大的,不确定性是最大,对于天平来说就是可以排除的不确定性最大。所以,分堆的原则应该是尽可能地每堆数量均衡
  2. 另外,每次称重时,左右两边珠子数目应该一样,这很明显。
  3. 对于N个小球找到缺陷球,m次称重是否能行,比较log2(N∗2+1)log_2(N*2+1)log2​(N∗2+1)与mlog23mlog_23mlog2​3的大小即可确定方案是否可行。所以在构造方案的时候,每次分堆后都可以用上面的公式检验一下。所以是一个递归的过程。

2.2.1第一次称重方案

第一次称重后,可用机会为2次,由于2次称重可以确定的信息量为2log232log_2{3}2log2​3,故第一次称重后硬币的信息量应该小于等于这个值,否则方案失败。

按照第一个基本信息,我们很容易得出第一次称重方案为三堆,每堆四个,即(4, 4, 4),如果存在多种解决方案那么这种方案是最合理的方案,如果只存在一种方案,那么这是唯一解。穷举讨论所有的分堆情况,如下:

  • 分为两堆,当一堆多一堆少时,无法放在天平上称重。
  • 当分为(6,6)两堆时(每堆为6个币,下同),方案也不可行,一个反例是:称重后,如果不相等,那么必定一堆6枚中有一枚重假币或者另一堆6枚中一枚轻硬币,信息量为log2(6+6)log_2{(6+6)}log2​(6+6),大于2log232log_2{3}2log2​3,故不正确。
  • 分堆为(5,5,2)三堆时,称重后,如果不相等,那么信息量为log210>2log23log_2{10}>2log_2{3}log2​10>2log2​3,故不正确。
  • 分堆为(4,4,4)三堆时,称重后,如果相等,那么只用再测第三堆,此时信息量为log2(2∗4+1)=2log23log_2{(2*4+1)} = 2log_2{3}log2​(2∗4+1)=2log2​3。如果不相等,那么第三堆均为正常硬币,前面两堆需要称重,此时为信息量为log28<2log23log_2{8} < 2log_2{3}log2​8<2log2​3。方案可行
  • 分堆为(3,3,6)三堆时,一个可能的反例是:第一次称重,3和3两堆平衡,那么剩下的6个硬币中,可能有:有偏重的假币(每个硬币都有可能,6种情况),有偏轻的假币(每个硬币都有可能,6种情况),没有假币(一种情况)三大类情况,信息量为log2(2∗6+1)>2log23log_2{(2*6+1)} > 2log_2{3}log2​(2∗6+1)>2log2​3。所以不行,那么同理(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}log2​3,情况少利于讨论分析。第二次可能称重方案非常多。所以,先推定最后一次称量方案,然后借此反推构造第二次的方案。

一些术语声明:
########################################################################
#声明:一硬币是偏轻的假币,称轻假币,偏重的假币,则是重假币
#声明:一硬币要么是真币,要么是重假币,即潜在地可能是重假币,称潜重假币
#声明:一硬币要么是真币,要么是轻假币,即潜在地可能是轻假币,称潜轻假币
#上述两类概念下面会经常用到,易混淆,务必记清。
########################################################################

设,最后一次称重时,仍需要考虑硬币数为x:

  • x=1,详情见下表。
项目 内容
定义 前k-1次称重后,这枚硬币最多有三种情况:正常,重假币和轻假币。
不确定性为log23log_2{3}log2​3。
一个真实场景 其它硬币都已确定为真币,而这枚币没有上过天平,或者上了天平但是没判断出来。
称重方案 只需与真币再比较就可以确定其身份。
  • 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}log2​2,可行。
称重方案 有假币且知轻重,只需要两枚任取一枚与真币比较即可。
  • x=3,详情见下表。
项目 内容
定义 前k-1次称重后,其他均为真币,这三枚硬币必定只有有一枚假币,如果是假币那么已经知道他的轻重。此时信息量为log23log_2{3}log2​3。
一个真实场景 三枚硬币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}log2​3,所以方案一定失败。

在上述讨论中,对每种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}log2​2,如果最后只剩下一枚硬币待确定,信息熵为log22log_2{2}log2​2。由于这种方案可以确定的信息量少于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枚真币@,然后均分两堆。只有如下两种拿法。

  1. 单堆独取 从某堆拿3个硬币。比如,拿走abc三枚硬币,补上@和ABCD任意一枚,两堆可能是方式如d@A和BCD,或者d@C和ABD。
  2. 双堆混取 一堆取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}log2​4>log2​3,方案不可行。
分堆为dAB和CD@,讨论如下:
天平状态 解决方案
----------- :-----------
天平平衡 dABCD均为真币,x=3发生,可行。
dAB较重 AB中一定有一枚较重的假币,x=2发生,可行。
dAB较轻 AB是真币,abc也是真币,d是潜轻假币,CD是潜重假币,dCD中定有假币,x=3发生,此时余下的信息熵为log23log_2{3}log2​3,可行。

综上所述,单堆独取可行。

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个小球(外观一模一样),其中一枚缺陷小球,不知道是略轻还是略重,使用两次天平是否可以找到此球?

当时听到了这个题目,感觉解法很巧妙,记住了,但是各种变种问题,碰到就死。直到学了信息论才恍然大悟,相见恨晚。不由得感叹:只会解一题是野路子,会解一个系列,才是科班出身。下面解答一下:

  1. 很明显,8个小球,其中一个轻,不确定性(信息熵)为log28log_2 8log2​8,而两次天平称重可以提供的信息量为log29log_29log2​9,所以应该存在这样的方案,而且由于信息量相差不大,所以很悬,如果存在的话只有一种解法。
  2. 第一次称重,分两堆(4, 4),第二次称重时无法解决剩下的4种情况。故第一次称重只能是,分三堆(3,3,2),这样即可满足情况。

变种问题中,不确定性为log2(8+8)log_2(8+8)log2​(8+8),超出两次天平测量的能力范围,故无法找出此球,至少需要三次称量(log227>log216log_2{27} > log_216log2​27>log2​16)。寻找方法类似。

四、总结

题目解法不唯一,利用信息熵可以做理论指导。称重方案可以使用二叉树的形式来表示,那么此时利用信息熵可以做剪枝优化操作。
鸣谢女朋友,她想出第一条具体的解决方案,上述的想法也是在她想出方案后我经过总结思索出来的。
另外想说的是,有指导武器的时候,要相信数据多做尝试,而不是相信自己的直觉。

五、参考文献

  1. 信息论实验-称硬币

信息熵--硬币称重问题-详解相关推荐

  1. 电石双向无人值守称重系统功能详解

    无人值守称重系统要实现车辆行驶控制.称重数据的采集.过衡车辆的视频显示和抓拍.灵活多样的磅单和报表定制.准确快捷的数据查询等功能.能够满足不同场合的称重需求,提高称重操作的工作效率. 1.满足系统的个 ...

  2. 地理坐标系、大地坐标系与地图投影与重投影详解

    地理坐标系.大地坐标系与地图投影与重投影详解 基本概念 首先简单介绍一下地理坐标系.大地坐标系以及地图投影的概念: 地理坐标系:为球面坐标. 参考平面地是椭球面,坐标单位:经纬度: 投影坐标系:为平面 ...

  3. Android的ELF文件重定位详解,包括64位

    0x01 引言 ELF文件格式,主要基于两种,一种是基于链接视图,链接视图即是基于节(Section)来进行解析,一种是基于执行视图,执行视图即是基于段(Segment)来进行解析.前一种是用于静态分 ...

  4. 12枚硬币称重问题(面试)

    问题描述: 12枚硬币,其中11枚真币1枚假币,现有一架天平,最少称多少次可以找出这枚假币并且知道假币和真币的相对重量. 答案是三次,称重过程描述如下. 第一步:分组,分三组,1 2 3 4为一组,5 ...

  5. 51单片机电路原理图_HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理图、论文等...

    设计要求 1.系统可实现电子秤基本的称重功能(称重范围为0-10Kg,重量误差不大于±0.005Kg): 2.系统应具备键盘输入单价,显示重量,计算总价的功能: 3.单价和总价金额的单位为元,最大金额 ...

  6. 出参传递数组指针_C语言指针重难点详解

    1为什么使用指针 假如我们定义了 char a='A' ,当需要使用 'A' 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 ...

  7. 利用结构体数组实现重排序(详解)

    一:要求 输入乱序的 成绩单 包括 姓名和成绩,成绩按照递增顺序 输出,如果遇见成绩相同的 按名字的字典序输出. 示例: 输入 5 w 12 a 12 v 7 c 3 e 9 输出: c 3 v 7 ...

  8. 24. PE结构-PE详解之基址重定位详解

    问题一:什么是基址重定位? 答:重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位.打个比方:例如你现在计划在某某地方建 ...

  9. mysql可重复读和间隙锁_解决MySQL可重复读——详解间隙锁

    间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制,(下面的所有案例没有特意强调都使用可重复读隔离级别)幻读的问题存在是因为新增或者更新操作,这时如果进行范围查询的 ...

最新文章

  1. 使用宝塔面板部署tp5网站
  2. python多线程处理图片_Python斗图网多线程爬取图片
  3. Linux中grep命令 常用选项
  4. HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用
  5. MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件
  6. 算法入门篇七 前缀树
  7. LeetCode 670 最大交换 (暴力+贪心、Python)
  8. java数字时钟控件_Java-数字时钟(简易版)
  9. Python函数进阶
  10. 美团回应遭反垄断调查;腾讯因《地下城与勇士》被抄袭获赔3000万;iOS 14.5 正式版发布|极客头条...
  11. c读取txt文件内容并建立一个链表_面试官给我挖坑:rm删除文件之后,空间就被释放了吗?...
  12. 听说现在流行搬电脑回家?云桌面救星来了
  13. adobe怎么统计字数_pdf文件怎么快速统计字数?
  14. 电脑上的歌曲怎么传到苹果手机上面,怎么把电脑上的歌导入苹果手机
  15. 微信小程序 断网异常处理
  16. 如何把握云计算时代风口 怎么能掌握云计算技术
  17. 变量foo 和 bar的由来
  18. Autowired注解起什么作用呢?
  19. 陪审团(01背包问题倒推具体方案)
  20. antDesignPro线上刷新404 和 liunx部署使用mock数据 umi-serve + pm2

热门文章

  1. 互联网基础与应用复习
  2. 什么是泊松分布?什么是泊松过程?
  3. 带负荷测试要求二次最小电流_带负荷测向量
  4. [转帖]隔行扫描与逐行扫描视频有什么区别
  5. 南都娱乐周刊否认爆料文章出轨因与其有私人恩怨
  6. python对erp系统有帮助吗_ERP系统的优点
  7. 算法-时间频度 时间复杂度 空间复杂度
  8. C++变量的引用 | 使用变量的引用
  9. Vim、Shell及Linux命令的高效使用
  10. 基于智慧路灯杆的老旧小区改造方案