上个月,00后女孩陈诺在中国儿童青少年魔方挑战赛上,“0秒”还原魔方,引起广泛关注。网友们纷纷称赞:禁止在麻瓜面前施展魔法。


还原魔方,应该是很多人童年的“小小梦想“。

然而魔方却并不只是代表童年回忆的玩具,其实它蕴含着深厚的数学知识,特别是作为“群论”应用的一个极佳例子,得到了许多研究。

接下来,就让我们一起走进童年回忆的背后,挖掘儿时未见的深度吧!

魔方的历史和当下

魔方(Rubic cube)是由一名匈牙利教授Ern Rubik发明的,最初他发明魔方,是作为一种教学用具,希望通过魔方的空间结构和操作特点来提高学生们的空间想象能力


据说是世界上最早的魔方

1974年,魔方一经问世,迅速受到世人的喜爱,并得到了蓬勃发展。从最初的三阶魔方,发展到四阶、五阶乃至更高阶,此外还出现许多异形魔方,比如镜面魔方、金字塔魔方、五魔方等等。


各种不同的衍生魔方

如今,在世界魔方协会WCA(World Cube Association)的赛事中,目前三阶魔方的单次还原世界纪录由8岁的中国小将耿暄一创造,他在2025年沈阳春季魔方赛中以3.05s的成绩打破世界纪录,成为新的世界纪录保持者。



三阶魔方单次还原世界纪录历史

魔方的组成

经典3×3×3三阶魔方是由54个小面组成的正方形,每个侧面分成9个小面,总体由26个“小立方体“组成,分别包括6个中心块、12个棱块和8个角块



其内部构建十分精巧,各个构件之间互相嵌合,中心块与中心轴架通过转动副连接,转动每一层时,每一层的子块之间通过互相约束而自锁,成为一个构件,由组合转动副和组合移动副共同实现每层的转动。



三阶魔方的内部构造和运动副

四阶魔方,看似只是多加了一阶,实际复杂度却大大增加。其由24个相同的中心块、8个相同的角块、24个相同的边块、T形连接件、D形连接件等130多个零件组成。中心连接件、T形连接件和D形连接件共同构成的中心球为核心转动件,魔方子块镶嵌在中心球表面,与三阶魔方相同的是,转动一层时,每一层的子块之间通过互相约束而自锁


四阶魔方内部构造图

按国际惯例,魔方着色是按照:上面黄色、底面白色、左边蓝色、右面绿色、前面红色、后面橙色来的,意味着白色黄色相对面,蓝色绿色相对面,红色橙色相对面。


三阶魔方的中心块被固定在中心对称十字架上,中心块的颜色对应并不会随着拧动魔方而改变;但四阶魔方不同,中心块的相对位置可以任意改变,但受到棱块、角块颜色固定的影响,必须旋转到满足惯例的中心块排布才能复原。

三阶魔方总的状态数有多少?这可以通过排列组合计算出来。

在魔方中,角块只能被旋转到角块的位置,棱块只能被旋转到棱块的位置。对于8个角块,第一个角块可以选择的位置有8种,第二个角块可以选择的位置有7种,以此类推;每个角块在每个位置可以有3种颜色方向,当有7个角块的位置和方向确定后,最后一个角块的位置和方向也被确定(因为不能单独翻转一个角块),因此角块的状态数量为

对12个棱块而言,类似的,第一个棱块可以选择的位置有12种,第二个棱块可以选择的位置有11种,以此类推;每个棱块在每个位置可以有2种颜色方向,当有11个棱块的位置和方向确定后,最后一个棱块的位置和方向也被确定(因为不能单独翻转一个棱块),因此棱块的状态数量为

除了以上这些状态以外,在魔方的实际扭动中,还有一半的可能性是不会在魔方的正常旋转中达到的,因此还需要将以上状态数除以2。

这样,就得到了上式中三阶魔方的总状态数。

对于N阶魔方,我们也可以使用类似的方法(即先讨论角块和棱块的所有状态,再排除不可能被旋转出的情况)去讨论其所有可能的状态数,这里我们直接跳过冗长的证明,直接给出N阶魔方状态数的通解吧:

奇数阶魔方状态总数:

偶数阶魔方状态总数:

魔方的复原

经过半个世纪的历史,三阶魔方的复原发展出角先、CFOP、桥式等方法,而随着时代进步和魔方复原机器人的兴起,人拧和机器复原也朝着各自具有优势的方向延伸出不同的体系,这里我们先简单介绍手拧的复原方法。

01

角先法(Corners First)

最早被魔方的发明者Rubik所使用的复原方法,需要记忆的公式较少,也很直观,但步骤很多,且需要敏锐的观察能力和反应能力。其包括底面及顶面角块归位、底面及顶面棱块归位、中心层棱块归位、检查颜色方向几步,虽然发明较早,但与如今的盲拧思路比较类似。

02

层先法(Layer by layer)

1979年,层先法由大卫·辛格马斯特首次提出,这是大多数新手玩家所必学的方法,比较符合人对魔方复原的认知——一层一层复原


03

CFOP解法

这是目前最为主流的速拧解法,在WCA大赛中非常受欢迎。其由捷克的Jessica Fridrich等人在1981年左右提出。方法涉及到119个公式,由Cross底层十字、F2L(First 2 Layer)还原下两层、OLL(Orientation of Last Layer)调整上层棱块和角块的方向、PLL(Permutation of Last Layer)完成上层所有块的位置排列组成。可以理解为层先法的精华迅速版。


CFOP四个阶段的目标状态

魔方中的群论

在开始聊群论之前,我们先需要了解一套对于魔方爱好者非常熟悉的一套“语言“,即魔方转动的符号描述,也是魔方公式的通用表达

魔方的转动以魔方面的英文缩写来表示,手持魔方时,魔方的六个面分别为U(up)R(Right)F(Front)D(Down)L(Left)B(Back),用每个方向的大写首字母来表示“将该面顺时针旋转90度”,具体的表示如下图所示。


在数学中,我们暂时忽略中间层和两层一起的转动,因为它们都可以用这六种转动的叠加实现。

而这6个转动,构成了魔方所有转动生成的集合

群论,是研究“群“这一代数结构的学科,群(Group)是一种规定了特殊乘法的集合。我们利用群的定义,可以证明上述的6个转动构成了“魔方群”

当规定了元素的“乘积”法则之后,元素的集合G若满足下面四个条件,则称其为群G:

①集合对乘积的封闭性

②乘积满足结合律

③集合中存在左恒元,用它左乘集合中的任意元素,保持该元素不变:

④任意元素的左逆元存在于集合中,满足:

即每个元素都存在一个与它运算后等于左恒元的元素

首先我们定义魔方群中的“乘法”法则,规定魔方的转动合成运算是从左向右的,即

M1M2表示先转动M1再转动M2比如RU表示先转右面,再转上面。用c表示魔方状态,即各块和小面的方位,用M(c)表示魔方在状态c下经M转动后所生成的新状态。

设G是魔方所有转动生成的集合,那么它能够满足:

1.封闭性:G中任意元素都可以表示成一系列转动的合成,则G中任意两个元素的合成同样是一系列转动的合成。

2.结合律:用c表示任意魔方状态,则

3.存在左恒元:魔方不进行转动,或是由转动组合而成原状态时,为单位转动,所以存在左恒元。

4.存在左逆元:若一转动表示为,

, , 则

故逆元存在。

即证明,由魔方所有转动生成的集合,以合成作为运算,构成一个群,称为魔方群。

我们这里建立的魔方群,表示的是魔方的转动的描述,那有没有办法描述出魔方的状态呢?

三阶魔方的状态,由以下四个条件共同决定:

  1. 角块的位置

  2. 角块的方向

  3. 棱块的位置

  4. 棱块的方向

在这四个条件中,1和3比较方便定义的。因为角块和棱块在旋转过程中只会一直呆在角块和棱块位置,所以我们可以用置换群来定义:

置换群是指n个客体排列次序的变换,n个客体的n!个置换的集合满足群的四个条件,构成群,称为n个客体置换群,记作Sn

G是魔方群,SV是角块在G作用下的置换群,SE是棱块在G作用下的置换群。定义与g相对应的角块置换σ和棱块置换τ如下

这样,角块的位置可以用S8中的元素表示,棱块的位置可以用S12中的元素表示

要表述角块和棱块的方向,我们还要约定一种指向特定面的字母表示法。用小写的u, d, f, b, l, r表示各面;用两个方位字母确认棱块,排在首位的字母为指向的面,如db表示d(下)面b(后)方位的小面;用三个方位字母确认角块,如ufl表示u(上)面fl(前左)方位的小面。

从角块开始,在每个角块朝上/下的一面上标记一个数字:

在u面上的ufl小面上标记1

在u面上的urf小面上标记2

在u面上的ubr小面上标记3

在u面上的ulb小面上标记4

在d面上的dbl小面上标记5

在d面上的dlf小面上标记6

在d面上的dfr小面上标记7

在d面上的drb小面上标记8

在这一步被标记的小面称为标准面,用以决定角块的方向。下一步,在标有序号的这些小面上再标记0,然后顺时针旋转,在角块的另外两面上依次标记1和2 。


在以上标记下,就可以定义角块的方向了,用ν=(ν1,ν2,...,ν8)表示角块的方向,其中νi表示第i个角块标准面上的数字,也可以认为是顺时针旋转该角块,使其标记为0的面与标准面重合所需要的次数,ν满足

类似地,可以定义棱块的方向,在每个棱块朝上/下/前/后的一面上标记一个数字:

在u面上的ub小面上标记1

在u面上的ur小面上标记2

在u面上的uf小面上标记3

在u面上的ul小面上标记4

在b面上的bl小面上标记5

在b面上的br小面上标记6

在f面上的fr小面上标记7

在f面上的fl小面上标记8

在d面上的db小面上标记9

在d面上的dr小面上标记10

在d面上的df小面上标记11

在d面上的dl小面上标记12

在标记有序号的这些小面上再标记0,然后在棱块的另一面上标记1。

用ω=(ω1,ω2,...,ω12)表示边块的方向,其中ωj表示第j个边块标准面上的数字,ω满足

设ν(g)和ω(g)分别表示g作用后的角块方向和边块方向,举例而言,对于R即右面转动90度,左面的角块没有发生变化,因此ν1=0,ν4=0,ν5=0,ν6=0;右边的角块发生了变化,有ν2=1,ν3=2,ν7=2,ν8=1,于是ν(R)=(0,1,2,0,0,0,2,1),即表示出了角块的方向。


经过上面的定义,任何魔方的状态就可以用这四个量来确定了。

  1. 角块的位置:σ ∈ S8

  2. 角块的方向:ν=(ν1,ν2,...,ν8)

  3. 棱块的位置:τ ∈ S12

  4. 棱块的方向:ω=(ω1,ω2,...,ω12)

    即魔方群

当然,表述魔方群的方法远远不止这一种,期待着大家用更多的方法更巧妙地将魔方纳入数学体系中~

魔方机器人的复原

当我们已经了解了如何用群论表达魔方之后,我们再回来看看机器人——它是怎么复原魔方的?



在前面列举的复原魔方方法,都是根据人的直观感觉来进行策略,而机器人策略则完全不符合人的直觉,对他们而言,步骤更少的方法才是最佳选择。

01

TM算法(Thislethwaite Method)

TM算法的策略是通过逐步降低魔方所处的群到更小的子群,使得魔方的状态数减小,直到最后的单位子群,就复原了魔方。所以利用TM算法复原魔方的每一步来看,魔方都是很乱的,但魔方的状态数是随着群的减小而在逐渐减小的。

TM算法对于公式的记忆和判断要求非常高,人手利用TM算法复原魔方是非常困难的,但计算机强大的运算能力使TM算法成为可能,对于计算机而言它也是步骤更少的优选


TM算法降解子群的四个步骤


TM算法每个步骤的魔方状态

02

Kociemba算法(二阶段算法)

这是当前最主流的计算机解魔方算法,该算法平均可以在几毫秒的时间内得到一个不超过20步的解法。

该方法将魔方的复原过程分成了两个阶段,第一个阶段是将乱序魔方转动成一个子群内的状态,这个子群表示为G1=;第二阶段则是复原这个子群G1中的魔方。算法将会搜索这两个阶段分别需要的步数和总步数,并输出最短总步数的解进行复原。



Kociemba算法解上述魔方的过程

计算机的解魔方方法,大大降低了还原的步骤


计算机解魔方时间对比

半个世纪过去,魔方已从Rubik手中的教具,变成了世界各地孩子、长不大的孩子、计算机幼体的探索和快乐。

如果你还未学会复原,何不尝试着趁现在重拾童心呢?

如果你已经是大佬了,何不尝试着提升一下sub呢

参考资料

[1] https://zhuanlan.zhihu.com/p/348865035

[2] https://www.worldcubeassociation.org/

[3] https://zhuanlan.zhihu.com/p/35339755

[4] https://www.jaapsch.net/puzzles/

[5] https://zhuanlan.zhihu.com/p/138559685

[6] http://www.rubik.com.cn/notation.htm

[7]梁小龙.解魔方算法的研究和系统实现[D].东北大学,2013.

[8]李文超.面向多阶魔方的智能还原机器人算法设计与实验研究[D].燕山大学,2023.

[9]向腊.魔方机器人控制系统的设计与实现[D].湖南大学,2016.

[10]喻腾飞.魔方群的研究[D].中国科学技术大学,2014.

[11]朱磊.群论在魔方中的应用[D].苏州大学,2008.

[12]谭水生.解三阶魔方智能机器人系统的设计与研究[D].五邑大学,2020.

[13]https://people.math.harvard.edu/~jjchen/docs/Group%20Theory%20and%20the%20Rubik%27s%20Cube.pdf

编辑:花卷

1.2.

3.

4.

5.

6.

7.

8.

9.

10.

ad1 webp
ad2 webp
ad1 webp
ad2 webp