天平称小球问题
天平称小球问题有很多经典的范式解法,在这里我们谈论着只是其中最为广泛应用的一种——三进制编码解法。
为什么想起了使用三进制?其实很好理解。让我们考虑一下小球的状态,有:没放在天平上、在天平左盘、在天平右盘三种。我们不妨用一些数码来表示这三种状态:
0——没放在天平上
1——放在天平左盘
2——放在天平右盘
这样,我们就可以用一个数码串来表示某个小球被称量的过程,比如某个小球的编码是210120,就表明这个小球,第一次称量在右盘,第二次在左盘,第三次不在天平上,第四次在左盘,第五次在右盘,第六次不在天平上。很简单吧,仅仅用一个数码串就把小球复杂的称量过程表示出来了。
为了方便说明,下面都以“12小球称3次”来描述这个问题,不过,你很容易就能够推广到“M个小球称N次的情形”。好,闲言少叙,书归正传。
假设我们已经把12个小球编上不重复的3进制编码,称量的时候我们完全按照编码操作,第0步,我们把12个小球上的编码第0位为1的放在天平左边,编码第0位为2的放在天平的右边,编码第0位为0的则不放在天平上,记下称量结果;第1步,我们把12个小球上的编码第1位为1的放在天平左边,编码第1位为2的放在天平的右边,编码第0位为1的不放在天平上,记下称量结果;如此下去,编码有N位,我们就称量N次,得到N组结果。
考察一下结果的状态:天平平衡、天平左边轻于右边、天平左边重于右边。咦?怎么也是3种。(hia hia,无巧不成书嘛,好戏还在后面)我们用0来表示天平平衡,