棋盘覆盖和Hall's marriage theorem

今天整理了一下自己电脑里存了一年的所有PDF,然后发现好像有很多很多很多都没有看,所以今天一整天就翻这些PDF去了。

发现了这么一本杂志不知道什么时候下下来的叫做《Recreational Mathematics》,花了半天时间才找到我是在这里下的,然后看了一篇《The Mutilated Chess Board》,就顺手写下来吧(文中的图均出自这篇文章)。

1.棋盘的多米诺骨牌问题

这个问题很常见了,也就是说

对于一个 mn 的国际象棋棋盘,如果用 12 的多米诺骨牌覆盖,是否能互不重叠完全覆盖。

那么显然如果 n m 都为奇数,则不能完全覆盖,如果有其中一个为偶数,则可以完全覆盖。

如果我把这个棋盘移掉了两个相对的棋盘角呢?也就是这样:
棋盘覆盖和Hall's marriage theorem_第1张图片

其实这个问题如果注意到,一个 12 的多米诺骨牌,覆盖棋盘的时候必然覆盖一个黑格和一个白格,那么瞬间可以说出这个棋盘是不能被完全覆盖的,因为,这个棋盘有30个白格和32个黑格。

那么我们继续拓展这个问题

如果我们在完整的棋盘上随机移走一个白格和一个黑格,那么这个棋盘是否还能被完整覆盖呢?(当然前提是这个棋盘还是连通的)

显然是可以的,在《啊哈,灵机一动》中有这么一个解法,就是 nm 的棋盘会存在一个回路不重复不遗漏的遍历每一个棋盘格点,那这样如果挖掉一白一黑两个格子的话,就会把这个回路切割成两个部分,每个部分中黑格和白格个数相等,那这样就说明了这种棋盘是可以被完全覆盖的。

解决了这个问题之后,很自然我们会继续发问:

是不是对于一个棋盘,我挖去任意多的相等数量的白格和黑格,那么只要这个棋盘连通,它就可以被骨牌完全覆盖呢?

有一个叫Hall’s marriage theorem可以解决这个问题,当我如果同时挖去三个白格和三个黑格时,我们就可以构造一种情况使得棋盘就有可能不会被完全覆盖。

先来说说”Hall’s marriage theorem”是个什么东西吧。

通俗的说,就是大厅里有一群( n 个)汉子和一群( n 个)妹子在配对,每个汉子都会有一些心仪的妹子,每个妹子也有一些心仪的汉子,那么你想知道这 2n 个人能不能完全配对,只需要任意抓出一些汉子(妹子),看他们心仪的妹子(汉子)的个数是不是大于等于抓出来的这些汉子(妹子)的个数。如果我随便抓都满足这个条件,那么说明这 2n 个人是可以完全配对的,如果我抓出了一部分汉子,发现他们总共能看得上的妹子都没他们人多,则说明这 2n 个人是不能够完全匹配的。

举个简单的例子,有四个汉子{A,B,C,D},四个妹子{1,2,3,4},假设他们的口味是这个样子的:

A => {1, 2, 3}
B => {4}
C => {3, 4}
D => {3}
1 => {A, B, C}
2 => {B, C, D}
3 => {B, C}
4 => {C}

那么我们发现,如果我们抓了三个汉子{B, C, D},发现他们三个人总共也就喜欢两个妹子{3, 4},所以可以说明这 2n 个人是不可能完全匹配的。

但是如果我们不看这四个汉子,只管这四个妹子的口味(也就是说汉子匹配到的妹子可能是他不喜欢的),那么是存在完全匹配的,因为我变抓一部分妹子出来,都可以发现他们喜欢的汉子个数都不比他们人少,所以,是可以完美匹配的(例如:1 -> A 2 -> D 3 -> B 4 -> C)

那么回过头来看刚才那个骨牌覆盖的问题,我们就可以很轻易的构造出不满足的情况:

根据’Hall’s marriage theorem’, 我们可以把白格想象成妹子,黑格想想成汉子,那么不能完美覆盖的情况就是这个棋盘我随便抓几个黑格出来,发现他们周围的白格数比黑格数还少。

我们可以先画两个黑格(因为只有一个黑格时肯定不可能的),然后为了要连通,所以只能在两个黑格之间填一个白格,也就是这样:

两个黑格的情况

我们想让这两个黑格总共只有一个相邻的白格,所以我没有办法再加一个白格满足这个条件,因此,我们还需要一个黑格,然后再加上两个白格平衡,也就是这样:

棋盘覆盖和Hall's marriage theorem_第2张图片

这样左下方的两个黑格他们的周围总共只有1个白格,说明这个棋盘是没有办法被完全覆盖的。当然这个棋盘我们可以把它看成是 34 的棋盘挖掉了 3 个白格 3 个黑格的结果。

文中还提到了Hall’s marriage theorem的一个有趣的应用:

我们可以拿一副牌,去掉大小王总共52张,然后把这副牌随机分成 13 堆,每堆 4 张,我总能够有办法从每堆里拿出 1 张,使得拿出来的这 13 张构成一个顺子(A到K)。

等等,还没完。

我们把这 13 张牌放一边,这时候还是有 13 堆,每堆有 3 张,这时候再在每一堆里拿出一张,还能够使得拿出来的这 13 张构成一个顺子。以此类推,再在剩下的 13 堆中再取出一张还能构成顺子,最后每堆剩下一张,这 13 张也是个顺子。

当然,无论怎么洗牌怎么分牌,这都是成立的哦,可以用Hall’s marriage theorem来证明(提示:不可能有{A, …, K}的某个子集,他们所在的总堆数小于他们的个数)。

你可能感兴趣的:(覆盖,数学,棋盘,完美匹配)