信息熵--硬币称重问题-详解

在补《信息熵基础》,此书理论清晰,后面还有一堆要命的习题,加深理解和应用,实乃佳作。其中一些题目对我来说确实不易,记录巩固一下,也和大家交流一下。
顺便补一下,一份完整的参考资料或者书籍,应该包括两部分: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枚硬币,总的信息量是多少,就可以求解此问。详情如下:

  • 每次称重,只有三种可能结果(左重,相等,左轻)。在三种情况的可能性都是 1 3 \frac{1}{3} 31时,信息熵最大,也就是能够较少的不确定性最大。为:
    H ( X ) = − 1 3 l o g 2 1 3 − 1 3 l o g 2 1 3 − 1 3 l o g 2 1 3 = l o g 2 3 H(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)=31log23131log23131log231=log23
    这是因为信息熵在每种结果等可能出现的情况下,熵值最大。这也符合直觉。比如影视剧中,赌骰子时,往往有骰子有铅的桥段。这是因为正常的骰子,6面均等出现,不确定性大,难以猜对。加铅后,某一面出现的概率变大,不确定性减少,出千的人非常容易猜对。
  • n枚硬币,编号为1~n。硬币的轻重可能的情况有3类(详情如下),共2n+1种情况,每种情况发生概率相等,概率为 1 2 n + 1 \frac{1}{2n+1} 2n+11,故信息量为 l o g 2 ( 2 n + 1 ) log_2{(2n+1)} log2(2n+1)
    • 无假币,它是1种情况。
    • 有1枚轻假币,1~n都可能是这枚假币,故n种情况。
    • 有1枚重假币,同上也是n种情况。
  • 总得来说,每次使用天平可以减少的最大信息量为 l o g 2 3 log_2{3} log23,所以对于n枚硬币需要使用的天平次数为 ⌈ l o g 2 ( 2 n + 1 ) / l o g 2 3 ⌉ \lceil log_2{(2n+1)}/log_23 \rceil log2(2n+1)/log23

2.2第二问,穷举版答案

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

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

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

2.2.1第一次称重方案

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

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

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

第二次称重方案比较难想出来,而第二次称重后,剩余的信息量应该小于等于 l o g 2 3 log_2{3} log23,情况少利于讨论分析。第二次可能称重方案非常多。所以,先推定最后一次称量方案,然后借此反推构造第二次的方案。

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

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

  • x=1,详情见下表。
项目 内容
定义 前k-1次称重后,这枚硬币最多有三种情况:正常,重假币和轻假币。
不确定性为 l o g 2 3 log_2{3} log23
一个真实场景 其它硬币都已确定为真币,而这枚币没有上过天平,或者上了天平但是没判断出来。
称重方案 只需与真币再比较就可以确定其身份。
  • x=2,详情见下表。
项目 内容
定义 前k-1次称重后:
1. 如果有无假币不可知,那么信息熵为 l o g 2 ( 2 ∗ 2 + 1 ) log_2{(2*2+1)} log2(22+1),方案失败。
2. 如果有假币且不知轻重,信息熵为 l o g 2 ( 2 + 2 ) log_2{(2+2)} log2(2+2), 方案失败。
3. 如果有假币且知轻重,信息量为 l o g 2 2 log_2{2} log22,可行。
称重方案 有假币且知轻重,只需要两枚任取一枚与真币比较即可。
  • x=3,详情见下表。
项目 内容
定义 前k-1次称重后,其他均为真币,这三枚硬币必定只有有一枚假币,如果是假币那么已经知道他的轻重。此时信息量为 l o g 2 3 log_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,这种情况下,信息熵无论如何都会大于 l o g 2 3 log_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每枚硬币只可能有两种状态,故它们每个的信息熵为 l o g 2 2 log_2{2} log22,如果最后只剩下一枚硬币待确定,信息熵为 l o g 2 2 log_2{2} log22。由于这种方案可以确定的信息量少于n=12的信息量,所以方案不可行。具体如下公式:
l o g 2 ( 2 ∗ 12 + 1 ) = 4.6438 > l o g 2 ( 3 ) + l o g 2 ( 3 ) + l o g 2 ( 2 ) = 4.169925 log_2(2 * 12 + 1) = 4.6438 > log_2(3) + log_2(3) + log_2(2) = 4.169925 log2(212+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需要重新度量,但是信息熵为 l o g 2 4 > l o g 2 3 log_2{4}>log_2{3} log24>log23,方案不可行。
分堆为dAB和CD@,讨论如下:
天平状态 解决方案
----------- :-----------
天平平衡 dABCD均为真币,x=3发生,可行。
dAB较重 AB中一定有一枚较重的假币,x=2发生,可行。
dAB较轻 AB是真币,abc也是真币,d是潜轻假币,CD是潜重假币,dCD中定有假币,x=3发生,此时余下的信息熵为 l o g 2 3 log_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个小球(外观一模一样),其中一枚缺陷小球,不知道是略轻还是略重,使用两次天平是否可以找到此球?

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

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

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

四、总结

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

五、参考文献

  1. 信息论实验-称硬币

你可能感兴趣的:(动态规划,信息论,称重,小球称重,硬币称重,天平称重,12小球)