棋盘覆盖和Hall's marriage theorem
2015-02-05 21:26
183 查看
今天整理了一下自己电脑里存了一年的所有PDF,然后发现好像有很多很多很多都没有看,所以今天一整天就翻这些PDF去了。
发现了这么一本杂志不知道什么时候下下来的叫做《Recreational Mathematics》,花了半天时间才找到我是在这里下的,然后看了一篇《The Mutilated Chess Board》,就顺手写下来吧(文中的图均出自这篇文章)。
1.棋盘的多米诺骨牌问题
这个问题很常见了,也就是说
对于一个m∗nm*n的国际象棋棋盘,如果用1∗21*2的多米诺骨牌覆盖,是否能互不重叠完全覆盖。
那么显然如果nn和mm都为奇数,则不能完全覆盖,如果有其中一个为偶数,则可以完全覆盖。
如果我把这个棋盘移掉了两个相对的棋盘角呢?也就是这样:
其实这个问题如果注意到,一个1∗21*2的多米诺骨牌,覆盖棋盘的时候必然覆盖一个黑格和一个白格,那么瞬间可以说出这个棋盘是不能被完全覆盖的,因为,这个棋盘有30个白格和32个黑格。
那么我们继续拓展这个问题
如果我们在完整的棋盘上随机移走一个白格和一个黑格,那么这个棋盘是否还能被完整覆盖呢?(当然前提是这个棋盘还是连通的)
显然是可以的,在《啊哈,灵机一动》中有这么一个解法,就是n∗mn*m的棋盘会存在一个回路不重复不遗漏的遍历每一个棋盘格点,那这样如果挖掉一白一黑两个格子的话,就会把这个回路切割成两个部分,每个部分中黑格和白格个数相等,那这样就说明了这种棋盘是可以被完全覆盖的。
解决了这个问题之后,很自然我们会继续发问:
是不是对于一个棋盘,我挖去任意多的相等数量的白格和黑格,那么只要这个棋盘连通,它就可以被骨牌完全覆盖呢?
有一个叫Hall’s marriage theorem可以解决这个问题,当我如果同时挖去三个白格和三个黑格时,我们就可以构造一种情况使得棋盘就有可能不会被完全覆盖。
先来说说”Hall’s marriage theorem”是个什么东西吧。
通俗的说,就是大厅里有一群(nn个)汉子和一群(nn个)妹子在配对,每个汉子都会有一些心仪的妹子,每个妹子也有一些心仪的汉子,那么你想知道这2n2n个人能不能完全配对,只需要任意抓出一些汉子(妹子),看他们心仪的妹子(汉子)的个数是不是大于等于抓出来的这些汉子(妹子)的个数。如果我随便抓都满足这个条件,那么说明这2n2n个人是可以完全配对的,如果我抓出了一部分汉子,发现他们总共能看得上的妹子都没他们人多,则说明这2n2n个人是不能够完全匹配的。
举个简单的例子,有四个汉子{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},所以可以说明这2n2n个人是不可能完全匹配的。
但是如果我们不看这四个汉子,只管这四个妹子的口味(也就是说汉子匹配到的妹子可能是他不喜欢的),那么是存在完全匹配的,因为我变抓一部分妹子出来,都可以发现他们喜欢的汉子个数都不比他们人少,所以,是可以完美匹配的(例如:1 -> A 2 -> D 3 -> B 4 -> C)
那么回过头来看刚才那个骨牌覆盖的问题,我们就可以很轻易的构造出不满足的情况:
根据’Hall’s marriage theorem’, 我们可以把白格想象成妹子,黑格想想成汉子,那么不能完美覆盖的情况就是这个棋盘我随便抓几个黑格出来,发现他们周围的白格数比黑格数还少。
我们可以先画两个黑格(因为只有一个黑格时肯定不可能的),然后为了要连通,所以只能在两个黑格之间填一个白格,也就是这样:
我们想让这两个黑格总共只有一个相邻的白格,所以我没有办法再加一个白格满足这个条件,因此,我们还需要一个黑格,然后再加上两个白格平衡,也就是这样:
这样左下方的两个黑格他们的周围总共只有1个白格,说明这个棋盘是没有办法被完全覆盖的。当然这个棋盘我们可以把它看成是3∗43*4的棋盘挖掉了33个白格33个黑格的结果。
文中还提到了Hall’s marriage theorem的一个有趣的应用:
我们可以拿一副牌,去掉大小王总共52张,然后把这副牌随机分成1313堆,每堆44张,我总能够有办法从每堆里拿出11张,使得拿出来的这1313张构成一个顺子(A到K)。
等等,还没完。
我们把这1313张牌放一边,这时候还是有1313堆,每堆有33张,这时候再在每一堆里拿出一张,还能够使得拿出来的这1313张构成一个顺子。以此类推,再在剩下的1313堆中再取出一张还能构成顺子,最后每堆剩下一张,这1313张也是个顺子。
当然,无论怎么洗牌怎么分牌,这都是成立的哦,可以用Hall’s marriage theorem来证明(提示:不可能有{A, …, K}的某个子集,他们所在的总堆数小于他们的个数)。
发现了这么一本杂志不知道什么时候下下来的叫做《Recreational Mathematics》,花了半天时间才找到我是在这里下的,然后看了一篇《The Mutilated Chess Board》,就顺手写下来吧(文中的图均出自这篇文章)。
1.棋盘的多米诺骨牌问题
这个问题很常见了,也就是说
对于一个m∗nm*n的国际象棋棋盘,如果用1∗21*2的多米诺骨牌覆盖,是否能互不重叠完全覆盖。
那么显然如果nn和mm都为奇数,则不能完全覆盖,如果有其中一个为偶数,则可以完全覆盖。
如果我把这个棋盘移掉了两个相对的棋盘角呢?也就是这样:
其实这个问题如果注意到,一个1∗21*2的多米诺骨牌,覆盖棋盘的时候必然覆盖一个黑格和一个白格,那么瞬间可以说出这个棋盘是不能被完全覆盖的,因为,这个棋盘有30个白格和32个黑格。
那么我们继续拓展这个问题
如果我们在完整的棋盘上随机移走一个白格和一个黑格,那么这个棋盘是否还能被完整覆盖呢?(当然前提是这个棋盘还是连通的)
显然是可以的,在《啊哈,灵机一动》中有这么一个解法,就是n∗mn*m的棋盘会存在一个回路不重复不遗漏的遍历每一个棋盘格点,那这样如果挖掉一白一黑两个格子的话,就会把这个回路切割成两个部分,每个部分中黑格和白格个数相等,那这样就说明了这种棋盘是可以被完全覆盖的。
解决了这个问题之后,很自然我们会继续发问:
是不是对于一个棋盘,我挖去任意多的相等数量的白格和黑格,那么只要这个棋盘连通,它就可以被骨牌完全覆盖呢?
有一个叫Hall’s marriage theorem可以解决这个问题,当我如果同时挖去三个白格和三个黑格时,我们就可以构造一种情况使得棋盘就有可能不会被完全覆盖。
先来说说”Hall’s marriage theorem”是个什么东西吧。
通俗的说,就是大厅里有一群(nn个)汉子和一群(nn个)妹子在配对,每个汉子都会有一些心仪的妹子,每个妹子也有一些心仪的汉子,那么你想知道这2n2n个人能不能完全配对,只需要任意抓出一些汉子(妹子),看他们心仪的妹子(汉子)的个数是不是大于等于抓出来的这些汉子(妹子)的个数。如果我随便抓都满足这个条件,那么说明这2n2n个人是可以完全配对的,如果我抓出了一部分汉子,发现他们总共能看得上的妹子都没他们人多,则说明这2n2n个人是不能够完全匹配的。
举个简单的例子,有四个汉子{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},所以可以说明这2n2n个人是不可能完全匹配的。
但是如果我们不看这四个汉子,只管这四个妹子的口味(也就是说汉子匹配到的妹子可能是他不喜欢的),那么是存在完全匹配的,因为我变抓一部分妹子出来,都可以发现他们喜欢的汉子个数都不比他们人少,所以,是可以完美匹配的(例如:1 -> A 2 -> D 3 -> B 4 -> C)
那么回过头来看刚才那个骨牌覆盖的问题,我们就可以很轻易的构造出不满足的情况:
根据’Hall’s marriage theorem’, 我们可以把白格想象成妹子,黑格想想成汉子,那么不能完美覆盖的情况就是这个棋盘我随便抓几个黑格出来,发现他们周围的白格数比黑格数还少。
我们可以先画两个黑格(因为只有一个黑格时肯定不可能的),然后为了要连通,所以只能在两个黑格之间填一个白格,也就是这样:
我们想让这两个黑格总共只有一个相邻的白格,所以我没有办法再加一个白格满足这个条件,因此,我们还需要一个黑格,然后再加上两个白格平衡,也就是这样:
这样左下方的两个黑格他们的周围总共只有1个白格,说明这个棋盘是没有办法被完全覆盖的。当然这个棋盘我们可以把它看成是3∗43*4的棋盘挖掉了33个白格33个黑格的结果。
文中还提到了Hall’s marriage theorem的一个有趣的应用:
我们可以拿一副牌,去掉大小王总共52张,然后把这副牌随机分成1313堆,每堆44张,我总能够有办法从每堆里拿出11张,使得拿出来的这1313张构成一个顺子(A到K)。
等等,还没完。
我们把这1313张牌放一边,这时候还是有1313堆,每堆有33张,这时候再在每一堆里拿出一张,还能够使得拿出来的这1313张构成一个顺子。以此类推,再在剩下的1313堆中再取出一张还能构成顺子,最后每堆剩下一张,这1313张也是个顺子。
当然,无论怎么洗牌怎么分牌,这都是成立的哦,可以用Hall’s marriage theorem来证明(提示:不可能有{A, …, K}的某个子集,他们所在的总堆数小于他们的个数)。
相关文章推荐
- nyoj 45 棋盘覆盖
- 算法小白总结(三)-----分治法&&棋盘覆盖问题
- 棋盘的完美覆盖(多米诺骨牌完美覆盖)&&幻方(魔方阵)
- HDU 5100 Chessboard 用 k × 1 的矩形覆盖 n × n 的正方形棋盘
- NYOJ435 & SGU131 - 棋盘覆盖二 (状压DP+插头DP)
- java  棋盘覆盖程序 算法分析题目
- 算法篇-2-分治思想-棋盘覆盖&归并排序&Strasssen矩阵乘法&循环赛安排
- 棋盘覆盖问题
- HDU 3488--Tour【最小费用最大流 && 有向环最小权值覆盖 && 经典】
- poj 2125 最小割解决 "最小点权覆盖问题" +输出解(割边集)
- 棋盘覆盖问题原理及演示程序
- 棋盘覆盖--递归分治java实现
- FZU 1686 神龙的难题(重复覆盖问题&舞蹈链)
- 算法java实现--分治法--棋盘覆盖问题
- 算法系列(一):分治策略--棋盘覆盖
- 棋盘覆盖
- 高精度计算模板——棋盘覆盖问题
- 棋盘覆盖2(1X2骨牌 和 L型骨牌 混合铺满)(强行轮廓线DP)
- 棋盘覆盖
- 棋盘覆盖问题 (分治)