抽象代数之应用–智力拼图的探究
智力拼图,是我小时候玩的一个游戏,一个图片具体如下:
当时对于这个东西,虽然它没有魔方抽象,不过要把它拼好绝对不是一件容易的事情,我当时就作为一个笨小孩,总是乐于绕在其中不得其法。现在想想,应用抽象代数的理论可以把它轻易的解出来,其实,它只是群论里的一个简单应用罢了
模型抽象:
首先我们要建立这个玩具的数学表示:
为了方便起见,我们认为这样一个游戏是N*N大小的,而且右下角的那个角块为空。然后把其他的小块标号,现在假设N=3,正确的顺序如下图所示:
现在我们来制定游戏的规则,游戏的规则是:空格和它旁边的(仅有它旁边的可交换)。
这个游戏的抽象很简单,重要的是我们要做什么,我们的研究目的是:这种初始形式可以变成什么样其他的样式?
模型求解:
定义:一个置换(transition)就是把上述N*N的图中的任何两个数字交换。
这一节里我们将阐释这篇文章最重要的结论,这个结论是:
一个被打乱的3*3智力拼图可以被复原,当且仅当打乱后的样式和原始样式相差偶数个置换。
1. 首先我们永远要把空格保持在最下面,事实上,不论空格到哪里,它都可以回到最下面。(这很简单,也是明显的)
2. 每次进行一次操作,我们必须要移动一次空格,而根据1,我们要把空格挪到别的地方,然后再挪回来,这样,来回操作必须是偶数次,所以每次我们需要把次序重排,必须要偶数次操作。
3. 根据抽象代数的结论,偶数次置换,就是偶数次操作,这是等价的
4. 由2,3,我们可以得到,如果3*3的智力拼图可以复原,那么它必然经过偶数次置换,至此我们完成了(==>)的证明。
5. 为了证明(<==),我们找到一个偶置换,我们要求这个偶置换比较标准,最好就是2次置换。
在这4幅图中,我们每次都挪动了两次空格,从效果上来看我们把6->5, 5->8, 8->6, 这样,我们事实上通过了2次置换,记做(568)
现在来看我们证明存在任何(abc),这样我们就可以从初始形式得到所有的偶置换,也就是说,只要是偶置换,就可以复原。
除了(568),必然存在(56b) (b!=8)
(56b)(568)(65b)=(6b8)=(86b)
(86a)(86b)(68a)=(8ab)=(b8a)
(b8a)(b8c)(8ba)=(abc)
所以说我们有任意的偶置换。证毕。
注记:这样的所有偶置换,构成一个群,被称作交错群,事实上,偶置换再乘上一个置换,就成为一个奇置换,所以这奇偶置换的个数是相同的,这个就是所有置换,所有置换有8!那么多(除去空格),那么偶置换的个数是8!/2个,因此对于一个3*3的拼图,我们可以凑出8!/2=20160种正确样式!当然你把拼图拆了,可以弄出更多:)
对于N>3,我们可以类似的得到上述结论,但是N=2时,运用枚举法,它只有一种样式。
上述的构造对于玩智力拼图是非常有益的,因为,从这个构造我们可以作出任何的偶置换,所以如果这个拼图是正确的,我们一定能还原,虽然可能会比巧妙解法慢很多。
该文是本人自己根据回忆(。。。)想出,所以可能有考虑不周之处,或者说的不清楚的地方,请大家指出。





