|
魔方方面的研究主要有两个方向:人类复原魔方算法和计算机复原魔方算法。这两类算法非常不同,但是都是基于群论的基本原理。
人类复原魔方算法是将魔方群分解成子群的乘积,然后构造每个子群的生成元,应用交换子、共轭和复合的群论技巧来求解。基本操作相对简单,容易记忆。
计算机复原魔方算法核心是暴力搜索。但是由于魔方群过于庞大,直接暴力搜索并不现实。因此,我们将魔方的状态空间分成4个层次,复原过程分成4个阶段,每个阶段从外层空间抵达邻近的内层空间。每个阶段的搜索范围大幅减小,计算机足以胜任。等价地,我们将魔方群分解成嵌套的正规子群序列,每个整个子群对应一个状态子空间,子群的嵌套关系对应着状态子空间的包含关系,每个阶段的搜索范围对应着相邻两个正规子群形成的商群。
商群的概念
商群在群论中的地位举足轻重,我们往往将一个复杂的群进行子群、商群分解,从而简化问题的规模。假设G是一个群,N是一个子群。如果对于任意群中的元素,左陪集定义为。如果,那么N被称为是一个正规子群,记成。
给定群G的一个正规子群,定义为所有左配集的集合,。定义左陪集之间的乘法,
,
可以证明,这一乘法的定义和陪集的代表元选取无关,并且成群。的单位元是N,。群G分解成正规子群和商群的乘积。
进一步,我们可以再将N进行正规子群、商群分解,得到G的一个嵌套正规子群序列:。如果任意商群都是交换群,则群G被称为是可解群。
核心想法
在《魔方和群论(1)》中,我们将魔方群分解成一系列子群的积:角块位置的排列、楞块位置的排列、角块定向的扭转、楞块定向的翻转,同时角块排列和楞块排列的奇偶性相同。然后,我们明确构造每个子群的生成元,再将魔方群中的任意一个元素分解成生成元的乘积,从而实现魔方的复原。角块排列和楞块排列子群可以归结为交错群,其生成元为3-轮换。主要的构造技巧用到群论中的交换子(Commutator),共轭(Congjugate)和复合(Composite),同时用到的元素的阶(order)。这种算法非常适用于人类选手的盲拧。人类魔方还原算法基本上是逐块还原,选手可以直观看到阶段性的成果。
计算机魔方还原的方法不同,其阶段性成果对人类而言不太直观,但的确是向目标逐步逼近。如果直接用暴力搜索来求解魔方,因为搜索空间过大,搜索深度过深,通常计算机无法胜任。Thistlethwaite算法将整个魔方操作群分解成一个子群序列,,对应的状态空间分层。每个阶段计算机用中的操作,从中的某个状态出发搜索,抵达中的某个状态。这样,每个阶段的搜索深度比较小,计算机可以胜任。问题的关键在于如何进行群的分解,和如何判断每个状态在哪个阶段。
图1. 魔方的基本操作。
操作群分解
首先,我们将魔方群分解成一系列嵌套的正规子群序列,是整个魔方群,,
。
这几个正规子群为:
等价地,我们考虑魔方的所有状态组成的空间,是群对应的可解状态空间:即中的所有状态都可以用中的操作复原。显然,空间只包含魔方的初始状态,其他的状态空间构成嵌套关系:
,
给定一个状态,判断它属于哪个状态空间成为问题的关键。
图2. 棱块的定向规则。
从上面的讨论,我们可以看出,操作U和D既不会影响棱块定向,也不会影响角块定向。R和L不会影响棱块定向,但是会影响角块定向;F和B既影响棱块定向也影响角块定向。
状态空间分解
中的状态 群包含所有可能的操作,包含所有合法的状态。由前面的讨论《魔方和群论(1)》,我们得出中所有的状态满足3个条件:1. 所有角块的位置排列和所有棱块的位置排列或者同为奇数排列、或者同为偶数排列;2. 所有角块的定向指标之和可以被3整除;3.所有棱块的定向指标之和可以被2整除。
中的状态 在《魔方和群论(1)》中,我们定义了棱块的定向。由图2,我们可以看到操作将棱块的0面变到棱块的0面,因此不会改变棱块的定向。操作将棱块的0面变成棱块的1面,会改变棱块定向。由此,中所有的操作都保持棱块的定向,中所有的状态满足条件:所有棱块定向都已经是正确的。
图3. 角块的定向规则。
中的状态 操作保持棱块的定向,但是会改变角块的定向;操作保持角块的定向。因此群中所有的操作都保持魔方角块定向。同时,我们考虑介于U和D层的中间层棱块,,中所有的操作都将M中的棱块变换到M中的另一个棱块。换言之,作用在轨道上,保持不变。由此,中所有的状态满足两个条件:1. 角块定向都已经是正确的;2. 中的棱块还在中。
图4. 角块和棱块的轨道。
中的状态 我们再考虑群 中的所有操作, 这些操作都不会改变角块或者棱块的定向。12个棱块被分成3个轨道,如图4所示,所有标号相同的棱块属于同一个轨道;同样,8个角块被分成两个轨道,所有标号相同的角块属于同一个轨道。中的所有操作将角块或者棱块变到同一轨道中的另外一个角块或者棱块,换言之保持所有角块、棱块轨道不变。同时,中的操作使得角块位置排列为偶排列,同时使得棱块位置排列也为偶排列。中所有的状态满足两个条件:1. 每个角块和棱块都在正确轨道上;2. 角块位置排列为偶排列(或者棱块位置排列为偶排列)。
中的状态 群只有一个元素,只有唯一的状态,就是初始状态(或者完全恢复)。
搜索算法描述
计算机搜索算法描述如下:给定一个状态 ,我们用宽度优先算法在中搜索,得到操作 ,使得状态 在状态空间中。我们以为树根,以的所有生成元、或者生成元的逆作为边,进行生长。树中的每个节点都是一个状态,每条路径都是一系列操作。节点状态等于树根状态顺序右作用从根节点到当前节点路径上的所有操作。直到叶子节点属于状态空间。然后,用宽度度优先算法在中搜索,得到操作 ,使得状态 在状态空间中 。如此循环,得到状态序列,操作序列,,
。
每一次的搜索空间为, 这个空间的大小可以用计算机来暴力搜索,每个商群的大小如下:
第一阶段的搜索深度为7步;第二阶段的搜索深度为10步; 第三阶段的搜索深度为13步;第四阶段的搜索深度为15步。总共至多45步即可求得解。
小结
计算机魔方解法,核心是通过将大群分解成一系列彼此嵌套的正规子群,然后在商群空间中搜索,这种策略非常适用于规模庞大的空间搜索。算法的难点在于对于每个状态子空间的精确描述。这种方法使得我们看到抽象群论的实用价值。
原文发布在【老顾谈几何】公众号 (2018年8月17日)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-20 19:21
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社