这是一篇翻译文章,英文原文在:
Rubik’s Cube Algorithms Explained: How to Solve a Rubik’s Cube
六个面的魔方玩具,从我们还是孩子时期就让人着迷,然而除了少数人可以精通外,大部分人即便花很长时间也无法让它完整复原成所有面单一颜色。
那么您是否想一劳永逸地获取其中的奥秘呢?明年魔方上市就满50周年了,是时候用深奥的数学来解释解释其中的奥秘了。虽然立方体的内部是塑料制成的,但它真正的内部除了数字什么都不是。就让我们一探究竟吧。
首先的步骤是拆开魔方块。让我们从一些基础知识开始,一个3x3x3的魔方有六个面,每个面都有不同的颜色。每个面的中心都与支撑立方体的核心支架相连,因此除了原地旋转外它们不会移动。因此同样的颜色总是以相反的方向结束; 在标准的立方体上,白色与黄色相对,红色与橙色相对,蓝色与绿色相对。
打开一个魔方,你会发现它是由三种魔方块组成的。首先有一个中心支架,连接着每个面的中心。然后是小的魔方块,每块1x1x1。角立方块有三个彩色的边,边立方块有两个。一个魔方有一个核心,八个角立方块,十二个边立方块。
用这些数字完成最直接的数学运算就是你拼魔方所能发生变化的惊人总数:43,252,003,274,489,856,000。用更数学的方式写,这个数字是(8!*3^8*12!*2^12)/(3*2*2),大约约等于4.3*10^19或者4325亿亿种变化。
那么这个具体的计算是怎么来的呢?
第一项3^8,计算八个角块旋转的每一种方式。可以通过三种不同方式将角块放入其插槽中。8个角块的3倍,所以它们相乘得到3^8。
接下来是每个角块放在哪里。有八个角槽,所以第一个角块有八个选项。第二个角块有7个选项,第三个有6个选项,以此类推,一直到最后一个角块,它必须放在最后一个角槽中。计算结果是8*7*6*5*4*3*2*1,即8!,也就是8个角块全排列数量。
因此,第一个大块(8!*3^8)可以计算所有角块插入的可能方式。3^8是他们的方向,8!是他们的位置。下一个块(12!*2^12)是相同的思路,只是现在是边。边只有两个方向,所以12个边总共有2^12个方向。然后有12个位置,所以是12!,这是它们到达这些点的路径数或者说12个棱块全排列的数量。
现在我们进行的运算(8!*3^8*12!*2^12)/(3*2*2),它与魔方的一个事实有关,这个事实经常被感觉到,但并不总是被理解。天文数字(8!*3^8*12!*2^12)所解释的是魔方拆了随机组装后一共可以得到的总的组合数,但却并非正确的可还原的魔方的总组合数。而正确的总组合数只有12分之一。
这里是一个思维实验来说明计算过程。
假设你打开一个魔方,取出每一个魔方块,然后把所有的魔方块放回随机的槽中,当然角块只适合角槽,边块只适合于边槽。你会得到一个看起来打乱的普通的魔方,到目前为止,我们已经计算出了一共可以有多少种变化:(8!*3^8*12!*2^12)。现在有没有可能在不把它拆开的情况下解出这个杂乱的立方体?
答案是否定的。这是一个困住了许多新手的陷阱。如果你正在练习,你想打乱一个已经解决的魔方,你必须保持魔方完整并手动打乱它。如果你把它拆开然后随机重组,实际上只有1 / 12的概率可以解出。
答案就在算法里!想知道为什么是1 / 12吗? 有一种很好的视觉方式来理解它。一个被拆解并用魔方块随机重新组装的魔方,采用以下方式之一将有平等的机率的被复原。
我们考虑了展开后的12种不同情况。第一行有正常的角。第2行和第3行有一个角旋转到位。列1有正常的边,列2的一条边翻转到位,第3列交换了两条边,最后第4列有一条翻转的边加上两条交换的边。所以上面图片中的12个魔方块不能互相转换。然而却有第13种布局,可以变成这12个中的一个。你一定要问我们怎么知道的?
这里有一个联系,魔方的九个面上哪些魔方块可以移动,哪些不可以移动。一系列的动作通常被魔方爱好者称为“算法”。最受欢迎的算法是那些只移动了几个立方体而不动其他立方体的算法。算法的局限性是解决这个问题的关键。
12是由3个因子相乘得到的:12 = 3*2*2。我们需要解决一个因数是3,两个因数是2的问题。
3的因数可以归结为:有一种算法会扭曲两个不同的角,但是没有一种算法会扭曲单个角而其他的都保持不变。因此如果你拿起一个普通的魔方,撬出一个角并替换成扭曲的角,就不可能解开,你会把它从图表的左上角移到其下方的一个点。
但是如果你重复该过程并再多扭一个角,则不会增加第二个因子3。既然已经扭曲了两个角,我们就可以应用扭曲两个角的算法,直到至少固定一个。如果另一个碰巧在此过程中得到解决,那么我们很幸运,现在回到了可解的魔方。总体而言,拐角的方向可以采用以下三种方式之一。
第一个因子2是相似的。有一种算法可以翻转两条不同的边,但是没有一种算法可以翻转一条边。所以任意数量的翻转边都可以被摆成一条边,这条边可以翻转也可以不翻转,有两种可能。
最后一个因子2实际上涉及边和角,尽管我们在图表上用边显示了它。有一种算法在交换两个角的同时也可以交换两个边。没有任何算法只能交换一对角,也没有任何算法只能交换一对边。
如果有一个立方体,撬出两个边然后交换它们,则从图表上跳过两列,在第1列和第3列之间,或在第2列和第4列之间。如果交换一对角,则同样如此。但是交换一对边和一对角会互相抵消,因为有一种算法可以消除这种情况。
现在被12除的每个因子现在都做了解释,您就可以了解(8!*3^8)*(12!*2^12)/ 12的完整意义。我们有(8!*3^8)(12!*2^12)种方法可以将魔方块放置在魔方上,但是其中只有十二分之一可以用于可解的魔方上。因此(8!*3^8)*(12!*2^12)/ 12是您可以在不破坏魔方的情况下打乱魔方后可正确复原的魔方块的总组合数量,也就说会有4325亿亿种变化!
补充,三阶魔方的一些事实:
1.三阶模仿总共有26个块,包括8个角块,12个梭块,6个中心边块,54个颜色面,中心块是轴,永远不动,也不计算在内。或者把魔方看成3x3x3的矩阵,去掉中心点,恰好26个。
2.棱块的奇偶性,魔方中的棱块奇偶性指的是它所在的位置与其对应的目标位置之间需要经过的步数(即逆序数)的奇偶性。一个魔方的任何一种状态下,其棱块的逆序对数的奇偶性是不变的,因此,如果通过操作使得魔方的某个状态棱块逆序对数从奇数变成了偶数(或者从偶数变成了奇数),则说明这个状态是无法通过操作恢复到原来状态的,着一性质在魔方还原的过程中有重要作用。
3.角块的奇偶性,类似的,魔方中的角块奇偶性指的是它所在的位置与其对应的目标位置之间需要经过的步数(即逆序对数)的奇偶性,同样的,一个魔方在任何一种状态下,奇角块的逆序队数的奇偶性是不变的。
4.中心块的位置:中心块在魔方还原过程中不会移动,因此其位置是不变的。
5.中心边块的位置,中心边块也不会改变位置,其位置是不变的。
6.每个面的中心块连接到中间的支架上,保持不动,所以在魔方被还原后,对立的面的颜色组合是相同的。白色总是在黄色的对面,橙色的对面总是红色,蓝色的对面总是绿色。
7.当立方体的一个面被转动时,四个边立方体和四个角立方体被移动,比如,如果移动十次,总的移动次数就增加4次,这样看的话,十次中,边立方体移动了40次。
8.任何算法的边/角立方体移动总数必须是4的倍数,一个关键事实是,如果一个边立方体被移动偶数次并返回到相同的槽,它将具有相同的方向,相反,如果一个边立方体被移动了奇数次,然后放回同一个槽中,它将被翻转。
9.边块不做翻转移动到相邻边的步数是奇数(一步旋转即可),但是如果是翻转的边块做同样的操作则是偶数步(先原地翻转奇数步,再进行90度旋转,加起来偶数步)。
10. 基于此,最后,考虑一个实现这里目标的假设算法,在不改变任何其他立方体的情况下翻转一个边立方体。因此,被翻转的边被算法移动了奇数次,而其他11条边都被移动了偶数次。11个偶数和1个奇数的和总是奇数,但我们之前已经确定这个和必须是4的倍数。奇数是4的倍数?这是不可能的。因此不存在这样的算法。
11.有一种算法可以交换两个角同时也交换两条边。没有任何算法只能交换一对角,也没有任何算法只能交换一对边。如果你有一个立方体,撬出两条边,并交换它们,无解,交换两个角也是一样的。但是交换一对边和一对角会互相抵消,因为有一个算法可以撤销这个。
这些不变量在魔方还原,打乱和研究等领域都有重要应用。