李远哲 西南石油大学计算机科学学院
一副牌共有52 张,花色分黑桃、红桃、草花、方块四种,面值从A 到K 共13 种。我们需要用四张明牌体现出花色和面值这两类信息。第1 张明牌界定花色,4 张牌共同界定面值。
首先,由于总共5 张牌,最多包含4 种花色,根据鸽巢原理,一定有某种花色的牌大于等于2 张,我们就选这个花色的牌作为暗牌。比如,一手牌为(黑桃3,红桃5,黑桃7,方块J,梅花A),这其中有两张黑桃,我们就选其中一张黑桃作为暗牌。至于究竟选哪张,后边再来确定。这样至少保证一点,即暗牌的花色与第一张明牌相同。
其次,我们来确定暗牌的面值。总的思路是以第一张明牌的面值为基础,以第2至4 张牌的大小关系编码作为增量来确定暗牌的面值。
第2 至4 张明牌按一般规则2<3<…K<A,同面值的按四种花色也可定义:方块<梅花<红桃<黑桃,这样全副牌可以排成序列:方块2<梅花2<红桃2<黑桃2……<红桃<A 黑桃A。因此刚才例子中的一手牌就有唯一的次序:黑桃3<红桃5<黑桃7<方块J<梅花A。去除已经使用过的两张黑桃后,其余三张牌有:红桃5 <方块J<梅花A
假设我们暗牌选的是黑桃7,第一张明牌是黑桃3,如何用上述3 张牌表示增量4 是当前的主要问题。可以用中间三张牌的大小关系做如下编码:小中大 增量为1,小大中 增量为2,中小大 增量为3,中大小 增量为4,大小中 增量为5,大中小 增量为6.
按照以上编码,增量4 对应中大小,也就是第二到第四张牌对应为:方块J、梅花A、红桃5,全部5 张牌如下:黑桃3、方块J、梅花A、红桃5、黑桃7(暗牌)。
至此还有最后一个问题,假设黑桃牌不是黑桃3 和黑桃7,而是黑桃3 和黑桃J,也即二者差值大于6 怎么办呢?此时我们用黑桃J作明牌,用黑桃3 作暗牌,在J 的基础上加5 正好是16,也就是在模13 意义上的3。此时全部5 张牌如下:黑桃J、梅花A、红桃5、方块J、黑桃3(暗牌)。
如果五张牌中没有王牌,可以用第1 部分的策略来解决。以下我们仅需考虑有一张或两张王牌的情况。
我们仅需仅需把一张王牌放在明牌第1 张,用以指示暗牌也为王牌。明牌是大王,暗牌则是小王,明牌是小王,暗牌则是大王。此时不需要第2—4 张牌携带任何信息,因此可以处理成暗牌,助手一见一明4 暗,则第五张一定是另一张王牌。
当5 张牌中包含一张王牌时,按照第1 部分的策略,王牌一定出现在明牌里。
第一种情况,若王牌以外的四张牌中有相同花色的两张,则选择一张作为花色指示牌放在第一张明牌处,选择方法同上一部分。王牌作为偏移量指示部分,放在第2—4 位置中,此时王牌暗放。具体来说一般把王牌看成最大,黑桃A<小王<大王,其他约定规则与不含王牌相同。
第二种情况,若王牌以外的4 张牌花色各不相同,此时又要分两种情况:2a 和2b。2a 是另外4 张牌面值不完全相同,2b 是另外四张牌面值完全相同,比如4 张7。
2a:选两张序号之差不超过6 的牌,将序号低的放在首位,序号高的作为暗牌。然后按编码规则放好其它3 张牌,此时王牌明放,暗牌花色是用互补提示法,即没出现的那种花色,面值按前述规则确定。
2b:此时把王牌明放在首位,2 至4 张明放,第5 张暗放。此时采取互补提示法,花色由没出现的花色来标定,面值与其他3 张明牌相同。此时应为第一张为王牌,无法加减,这样不会造成混淆。
这个魔术或者叫游戏的拓展可以从两方面展开,一是一副牌上加以改变,不再是一副普通的扑克牌了,是一副我们自己构造出来的牌。另外可以从一手扑克牌上进行改变,比如不取五张牌搞读心术了,改为4 张、或改为6 张。也可以两方面结合,这样就是一个面貌全新的游戏了。
如果缩减为3 张明牌,一张用来暗示暗牌的花色和基础序号,那么只有两张牌可以暗示偏移量信息,而两张牌的大小关系只有两种可能的排列方式,因此每种花色最多只能有5 张牌,这样可以保证同花色的两张牌间的最小距离不会超过2。至于花色数,由于一手牌只有4 张,因此花色只能有3种,才可以保证有两张牌同花色。至此我们知道,4 张牌的读心术的全副牌应该为3 种花色,每种花色5 张牌,整副牌共计15 张。
从纯计数的角度考虑这个问题,如果我们从一副牌共d 张中抽取n 张牌的一手牌,我们可以传递多少种不同的信号?进而推得d 的上限应该是多少。
我们抽取n 张牌,究竟能传递多少种信号呢?首先明牌有(n-1)!种排列方式,暗牌又有n 种选择方案,因此总共有n!种信号。再将明牌的数量加入其中,则d=n!+n-1。即d 张牌的的一副牌可以通过抽取n 张的一手牌来进行读心术魔术。下面我们给出两个较小的例子。
当n=2 时,d=3。假设一副牌只有(1,2,3),我们任意取一手2 张牌,只可能是(1,2)或(1,3)或(2,3),此时我们可以将模3 意义下较小的一张作为明牌,即分别取1、3、2 作为上述3 手牌的明牌即可。
当n=3 时,d=8。此时就不是那么轻而易举的解答了。假设一副牌仍然是(1,2,3,4,5,6,7,8),典型的一手牌如(2,3,7)。此时我们考虑明牌可见的有序二元组和包含暗牌在内的3-组合之间的关系。
明牌是2 张牌的2-排列,如果整副牌是1---8,则这个2-排列共有8*7=56 种可能。同时我们考虑含暗牌的三组合c(8,3)恰好也等于56。因此如果我们能建立起一种一一对应关系来我们就可以从明牌的2 元有序对,直接推得一个3 元组合,这个三元组合必须包含二元有序对儿中的两个元素。
这两个集合基数是相等的,都为56。这两个集合之间的关系满足6-正则两部图,下面我们仔细分析下两个集合间的可能的对应关系。对于明牌<1,2>对应的3组合只能是以下六种,(1,2,3)、(1,2,4)、(1,2,5)、(1,2,6)、(1,2,7)和(1,2,8)。对于整手牌比如(1,2,3),对应的明牌只可能是<1,2>、<2,1>、<1,3>、<3,1>、<2,3>和<3,2>。其它有序对和三元组也都是如此。这样看来整幅图是6 正则的两部图。
幸运的是,根据两部图的婚姻定理,这样的正则两部图总存在完美匹配。这样我们就可以以其中一个完美匹配为编码和解码的原则来实现扑克牌读心术。
魔术谜题浩如烟海,编码理论魅力无穷,我们将二者结合,主要透过读心术魔术谜题及其解密来探讨编码的能力及其上限。其中不含王牌的谜题解法严密、逻辑清晰;含王牌的魔术谜题则略显复杂,情况也分得比较多。至于广义的扑克牌读心术,我们只是做了初步的探讨,这里有编码能力的问题,相对还是比较好研究的,更为困难的是具体可行解的探索,这将是长期的复杂的过程。目前还仅对正则两部图的求解有确实的理论依据和行之有效的做法,对于广义的问题有待于进一步探索。