在补《信息熵基础》,此书理论清晰,后面还有一堆要命的习题,加深理解和应用,实乃佳作。其中一些题目对我来说确实不易,记录巩固一下,也和大家交流一下。
顺便补一下,一份完整的参考资料或者书籍,应该包括两部分:1. 内容讲解,2. 作业习题及其标准答案。对于作者和读者,习题均能够加深理解和应用。
信息熵是这类问题硬币称重或者小球称重,或者天平称重的一种通解,学习下还是很有用的。利用信息熵指导不仅能回答是否能够,而且可以指导如何构造称重方案。
n枚硬币,可能有一枚假币,也可能没有。假币可能较重,也可能较轻。使用天平k次,确定n枚中是否有假币,如果有找出假币。(天平不是那种有砝码和游码的天平)
- 对于每个k来说,n最大为多少?
- n为12时,求k=3的称重方案。
对于每个k来说,n最大为多少?也就是k次称重最多可以排除多少信息不确定性。这个简单,一次称重最大可以确定的信息量为x,那么k次可以减少的总信息量为kx。我们在计算n枚硬币,总的信息量是多少,就可以求解此问。详情如下:
- 无假币,它是1种情况。
- 有1枚轻假币,1~n都可能是这枚假币,故n种情况。
- 有1枚重假币,同上也是n种情况。
配合信息熵,我们可以详细推敲k=3的称重方案。接下来详细讨论:第一次,第二次和最后一次称重的方案。下文内容比较简单,但是文笔水平有写的较啰嗦,简单问题复杂化(因为我的写作目的是通俗易懂详尽)。如果大家有什么想不明白的,建议纸上用二叉树模拟一下。
还有三点基本信息,希望大家记得:
第一次称重后,可用机会为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(2∗4+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(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),这和我们的第一条基本信息是符合的。
第二次称重方案比较难想出来,而第二次称重后,剩余的信息量应该小于等于 l o g 2 3 log_2{3} log23,情况少利于讨论分析。第二次可能称重方案非常多。所以,先推定最后一次称量方案,然后借此反推构造第二次的方案。
一些术语声明:
########################################################################
#声明:一硬币是偏轻的假币,称轻假币,偏重的假币,则是重假币。
#声明:一硬币要么是真币,要么是重假币,即潜在地可能是重假币,称潜重假币。
#声明:一硬币要么是真币,要么是轻假币,即潜在地可能是轻假币,称潜轻假币。
#上述两类概念下面会经常用到,易混淆,务必记清。
########################################################################
设,最后一次称重时,仍需要考虑硬币数为x:
项目 | 内容 |
---|---|
定义 | 前k-1次称重后,这枚硬币最多有三种情况:正常,重假币和轻假币。 不确定性为 l o g 2 3 log_2{3} log23。 |
一个真实场景 | 其它硬币都已确定为真币,而这枚币没有上过天平,或者上了天平但是没判断出来。 |
称重方案 | 只需与真币再比较就可以确定其身份。 |
项目 | 内容 |
---|---|
定义 | 前k-1次称重后: 1. 如果有无假币不可知,那么信息熵为 l o g 2 ( 2 ∗ 2 + 1 ) log_2{(2*2+1)} log2(2∗2+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,可行。 |
称重方案 | 有假币且知轻重,只需要两枚任取一枚与真币比较即可。 |
项目 | 内容 |
---|---|
定义 | 前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的取值我们只讨论了不确定性最大的情况,或者说硬币可能的真假轻重种类数量最多的情形,也就是最坏的情况。这是因为最后一次称重确定的不确定性越大,第二次称重需要面对的情况越简单。如果存在可行方案,那么符合这种情况的方案一定是其中一种,或者唯一的一种。
最后一次称重时,必定出现x=1,2,3的情况的任意一种。换句话说,第二次称重一定要导致上面三种情况出现一种。也就是,第二次的称重方案,是由这三种情况组合而成的。另外,在构造时候,优先考虑使用x=1和3的情况,因为信息熵大,排除的不确定性更大,组合出来的方案更加容易成功。
第一次称重时从(4,4,4)三堆,任取两堆称重,结果为:两堆相等和不相等两种情况。
说明这称重过的两堆是正常硬币(真币可以拿来做判断标准),第三堆有嫌疑,四枚硬币编号为1234。
尝试构造方案,使x=1发生。拿硬币1放在一边不参与此次称重,对234进行称量。如果要使x=1发生,那么要判定这三枚为真币,也就是从另两堆中拿3枚真币与他们称量。讨论如下:
天平状态 | 解决方案 |
---|---|
天平平衡 | 234为真币,则x=1发生,方案可行。 |
234比较重 | 硬币1为真币,则x=3发生,方案可行。 |
234比较轻 | 硬币1为真币,则x=3发生,方案可行。 |
综上所述,方案成功。 |
说明第三堆为真币(真币可以拿来做判断标准),天平上较轻的那堆硬币编号为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(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个硬币后,如何分堆是一个难题。
这种方案可行。具体如下:
以实际例子讲解,从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,可行。 |
综上所述,单堆独取可行。
天平状态 | 解决方案 |
---|---|
天平平衡 | cdBCD均为真币,x=3发生,方案可行。 |
cBC较轻 | BCd一定真币,abA也是真币,cD中一定有一枚的假币,x=2发生,方案可行。 |
cBC较重 | cD是真币,abA也是真币,BCd中有假币,x=3发生,方案可行。 |
本科时听过一道很有名的面试题目(听说是微软面试题,也可能是google的):
8个小球(外观一模一样),其中一枚小球比较轻,使用两次天平,请找到此小球。请设计方案
变种:8个小球(外观一模一样),其中一枚缺陷小球,不知道是略轻还是略重,使用两次天平是否可以找到此球?
当时听到了这个题目,感觉解法很巧妙,记住了,但是各种变种问题,碰到就死。直到学了信息论才恍然大悟,相见恨晚。不由得感叹:只会解一题是野路子,会解一个系列,才是科班出身。下面解答一下:
- 很明显,8个小球,其中一个轻,不确定性(信息熵)为 l o g 2 8 log_2 8 log28,而两次天平称重可以提供的信息量为 l o g 2 9 log_29 log29,所以应该存在这样的方案,而且由于信息量相差不大,所以很悬,如果存在的话只有一种解法。
- 第一次称重,分两堆(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)。寻找方法类似。
题目解法不唯一,利用信息熵可以做理论指导。称重方案可以使用二叉树的形式来表示,那么此时利用信息熵可以做剪枝优化操作。
鸣谢女朋友,她想出第一条具体的解决方案,上述的想法也是在她想出方案后我经过总结思索出来的。
另外想说的是,有指导武器的时候,要相信数据多做尝试,而不是相信自己的直觉。