魔方的原理是什么?
5月17日 碧落盟投稿 (小石头,站在偏数学的角度,来回答这个问题。简单一句话,魔方的原理就是:魔方群在状态集上的作用,具体回答如下:)
魔方群
整体来看,魔方(Rscube)是一个立方体,一共有六个面(surface),我们分别用U(up上)、D(down下)、F(front前)、B(back后)、L(left左)、R(right右)来标识,不妨规定:U对应黄(yellow)、D对应白(white)、F对应蓝(blue)、B对应绿(green)、L对应橙(orange)、R对应红(red)。
令,M{U,D,F,B,L,R},当任意面fM朝向我们时,对f面顺时针旋转90,被定义为魔方的基本操作(baseoperation),同样用f面的面标识来表示这种基本操作。所以M也代表魔方的全部基本操作。
对于,任意基本操作g,hM,gh称为g和h的复合(compose),表示先g操作再h操作的复合操作。可以验证,复合满足结合律,这样以来,以M为生成元在复合操作下会生成一个群G(M),称为魔方群(Rubik‘scubegroup)。其中,G的幺元,记为1,表示没有进行任何操作的操作。
什么是群?
群就是定义了一种运算的集合,其满足:
集合对运算封闭,即,对于任意都有(注意:和乘法运算类似,习惯省略不写);
运算有分配律,即,对于任意都有;
有幺元,即,存在使得对于任意都有;
有逆元,即,对于任意都存在的逆元使得。
什么是M生成的群?
数学上定义:包括M中元素的最小的群,为M生成的群,记为(M)。实际上,可以对M中任意操作g和h不断的进行复合运算,如果得到的新复合操作gh不在M中,就gh添加到M里,直到M不再增加,这样就得到了(M)。
同一基本操作g,连续四次复合就是对g面顺时针旋转360,这相当于没有操作,即,
gggg1
从而有:
gg1
也就是说g就是g的逆元g,相当于对g面逆时针旋转90。
另外,由gggg1还可以得到:
gg1
这说明连续两次复合g的逆元就是自己,即,顺时针旋转180相当于逆时针旋转180。
魔方状态
三阶魔方被细分为33327个立方小块(cubie)。其中,位于中间核心的那个小块不会受到魔方操作的影响到,而对于每个面中心的那个小块魔方操作同样无法改变它的位置,因此魔方操作所能影响到的小块为27(16)20个。
这20个受魔方操作作用的小块,又分为两类:
位于魔方8个角处的角(corner)块,它们有3个有效小面(facet);
位于魔方12个棱处的棱(edge)块,它们有2个有效小面;
由于,每个面的中心块保持位置不变,因此对于打乱的魔方,可以依照中心块来确定魔方的各个面方向。魔方在初始(或还原)状态下,角块和棱块的每个小面和该小面所在面的中心小块颜色保持一致。
我们用角块(或棱块)的各小面颜色所对应的标识的小写字母的组合来标识角块(或棱块):
对于角块,三个小面x,y,z,有6种排列方式,这里使用从u或d开始的顺时针排列方式,即,角块标识xyz保证xud并且xyz是顺时针;
对于棱块,二个小面x,y,有2种排列方式,这里使用从u或d(f或b)开始的排列方式,即,棱块标识xy保证
根据上面的规则,八个角块分别表示为:ufl,urf,ubr,dbl,dlf,dfr,十二个棱块分别表示为:ub,ur,uf,bl,br,fr,db,dr,df,dl
注意:六个中心块分别表示为:u,d,f,b,l,r,核心块一般用o表示。
更进一步,对于角块xyz,我们用xyz表示x小面,yzx表示y小面,zxy表示z小面,对于棱块xy,我们用xy表示x小面,用yx表示y小面,于是,我们就得到了带有标注的8312248个小面。将,全体小面记为T,则任意操作gG就变成了T上的一种置换(位置变换)。以F操作为例,
观察发现,小面fur经过F操作置换为小面flu,即,F(fur)flu,另有F(flu)fdl、F(fdl)frd、F(frd)flu,于是在F操作下,以上4个置换形成了一个置换圈:
我们称其为轮换(cycle),记为(furflufdlfrd)。
参与轮换的小面可以是任意多个,值得注意的是:任何一个小面a的轮换(a)相当于不做置换,有,1()(a)。
当然,实际上F操作包含多个轮换,将这些轮换以复合的方式,聚合在一起,就是定义了一个完整F操作:
F(furflufdlfrd)(fuflfdfr)(rfuufllfddfr)(rfuflfdf)(rdfurflufdlf)
同理,我们可以将其它魔方操作定义为轮换的复合。
注意:为了方便,我们也可以用148的正整数,来替代上面S中对小面的编码。
T上的所有置换函数,在函数复合下,组成置换群S。但是,因为角块的面永远置换不到棱块的面,所以G仅仅是S的子群。
用离散的小面来记录魔方的状态过于粗犷,重新审视魔方,我们会得到如下结果:
每个立方块都是一个整体,在任何魔方的操作下,组成它的小面不会分离;
每个立方块,有两种状态信息:位置和方向;
角块和棱块在魔法操作下相互独立,即,角块永远不可能转到棱块上,反之亦然。
基于,以上分析,我们首先,分别对角块和棱块进行定位(location):
角块:ufl1,urf2,ubr3,ulb4;dbl5,dlf6,dfr7,drb8;
棱块:ub1,ur2,uf3,ul4;bl5,br6,fr7,fl8;db9,dr10,df11,dl12;
令C{1,2,3,4,5,6,7,8},这里包含所有角块的位置信息,可以很容易将基本操作对角块位置的改变写成轮换形式:
U(1234),
D(5876),
F(1672),
B(3854),
L(1456),
R(2783)
显然,G作用在C上是置换群S的子群。
同理,令E{1,2,3,4,5,6,7,8,9,10,11,12},基本操作对于棱块位置的改变写成轮换形式为:
U(1432),
D(9101112),
F(38117),
B(1695),
L(45128),
R(27106)
同样,G作用在E上是置换群S的子群。
然后,我们分别对角块和棱块进行定向(orientation):
角块:ud为定向面,xyz012;
棱块:udfb为定向面,xy01;
对于保持定向信息,我们只需要定义,定位位置当前立方块的定向面对应的编号就可以了。而对于基本操作,对定向的改变,我们也只需要记录,原始状态下,经过基本操作后,各个定位位置,的定向面对应的编号就可以了。如果,原始状态下,即,定向面的编号为0,经过某操作,到新位置后,定向面编号为n,则原来定向面的编号为m,经同样操作,到新位置后,定向面编号就是(nm)modk,对于角块k3,对于棱块k2。0不旋转,1逆时针旋转,2顺时针旋转。
令,V(0,0,0,0,0,0,0,0)表示角块的所有定向,则基本操作为对角块定向的改变为:
U(0,0,0,0,0,0,0,0),
D(0,0,0,0,0,0,0,0),
F(1,2,0,0,0,2,1,0),
B(0,0,1,2,1,0,0,2),
L(2,0,0,1,2,1,0,0),
R(0,1,2,0,0,0,2,1)
对于每一位来说都是Z,总共8个Z就是Z,但是考虑在到7个角块固定的情况下,我们无法单独旋转剩下的那个,因此G在V上的作用实际上是Z。
令,W(0,0,0,0,0,0,0,0,0,0,0,0)表示棱块的所有定向,则基本操作为对棱块定向的改变为:
U(0,0,0,0,0,0,0,0,0,0,0,0),
D(0,0,0,0,0,0,0,0,0,0,0,0),
F(0,0,1,0,0,0,1,1,0,0,1,0),
B(1,0,0,0,1,1,0,0,1,0,0,0),
L(0,0,0,0,0,0,0,0,0,0,0,0),
R(0,0,0,0,0,0,0,0,0,0,0,0)
同理,G在W上的作用是Z。
当以上编号混合在一起使用时,为了区分,分别用c、e、v、w作为角块定位、棱块定位、角块定向、棱块定向编号的前缀,并将编号写成下标。例如:
F(cccc)(eeee)(v,v,v,v,v,v,v,v)(w,w,w,w,w,w,w,w,w,w,w,w)
辅助工具
在进行下一步分析之前,我们先编写一点JavaScript代码,以帮助我们,对G中的操作进行复合。
魔方状态(state)的格式为:
state:〔〔角块定位〕,〔棱块定位〕,〔角块定向〕,棱块定向〕
声明魔方初始状态s如下:
魔方操作(operation)的格式为:
〔〔〔角块轮换〕,。。。〕,〔〔棱块轮换〕,。。。〕,〔角块旋转〕,〔棱块旋转〕〕
基本操作声明如下:
声明,在给定状态上执行魔方操作的函数:
声明,从给定状态中分析出魔方操作的函数:
定义复合函数:
为了输出简洁,当所有角块(或,棱块)不发生旋转时,用一对空括号表示。
最后,我们对基本操作进行必要的扩展:
换位子和共轭
对于任意两个魔方操作g,hG,如果,g和h的复合满足交换律,则:
ghhg
等式两边右乘gh,有:
ghghhgghh1hhh1
如果不满足交换律,则:
ghgh1
令,〔g,h〕ghgh,称其为换位子(commutator)。
一般来说,魔方相对面,如:F和B,U和D,L和R之间是可以交换的,即,
〔F,B〕〔U,D〕〔L,R〕1
所有,换位子之间是可以交换的,即:
〔〔g,h〕〔g,h〕〕1
关于,换位子有性质1:如果g和h两种操作,只共同影响一个小块k,其中g为nk,h为mk,则有〔g,h〕(k,n,m),〔h,g〕(k,m,n)。
例如,若g(ccc),h(c,cc),则kc,nc,mc,于是有:
即,〔g,h〕(ccc),〔h,g〕(ccc)。
性质1推论:如果g和h两种操作,共同影响的小块,刚好在g和h中分别形成轮换和,则有〔g,h〕〔,〕。
例如:若g(cccc)(cc),h(cccc)(cc),则它们的共同影响小块c、c、c、c,分别在g和h中,组成轮转(cccc)和(cccc),于是有:
即,〔g,h〕〔(cccc),(cccc)〕。
魔方群中还有另外一种称为共轭(conjugate)的复合方式:对于任何操作g,hG,称ghg为h关于g的共轭。
共轭具有性质2:如果h(abc)而g将A,B,C分别映射到a,b,c,则有ghg(ABC)。
例如:若h(ccc),g(cc)(cc)(cc),则有:
即,ghg(ccc)。
魔方公式
好了!现在利用上面的知识,就可以开始构造魔方公式了。
寻找角块的换位公式
我们发现B关于R的共轭RB(R)RBR:
和F:
仅有c共同影响,于是它们满足性质1,有:
即,〔RBR,F〕RBRF(RBR)(F)RBRFRBRF(c1,c7,c8)。
注意:因为(ab)(ba)abbaa1aaa1,所以(ab)ba。
这里c,c,c不共面,考虑R:
刚好将11,28,37,于是根据性质2,有:
开头的RRRRRR,于是最终得到公式C:
即,
R〔RBR,F〕RRBRFRBRFR(ccc)
寻找棱块的换位公式
我们定义一种新的操作M:面对F面,顺指针旋转F和B面之间那个中间的面M。M操作只改变棱块:
我们发现M(或M)与U:
共同影响e,因此根据性质1,〔M,U〕构成三轮换:
即,〔M,U〕MUMU(eee)。
其实,M就相当于FB的复合,只不过,在执行M后,还做了R面朝向了U的动作。
这时执行U相当于执行R,于是翻译为基本操作〔M,U〕FBRBFU,验证:
最后,根据性质2,利用RU将这个三轮换,换到同一个面上:
倒数第2,3项合并后,就得到了公式D:
RU〔M,U〕URRUFBRBFUR(eee)
寻找角块的旋转公式
观察D关于RF的共轭RFDFR:
与U:
它们,有共同的轮转(cc),于是根据性质1推论,有:
〔U,RFDFR〕〔(cc),(cc)〕(cc)(cc)(c,c)(c,c)(cc)1(c,c)(cc)(c,c)1
这样以来,〔U,RFDFR〕就没有了位置变换,仅仅剩下的就是旋转:
于是,我们就得到公式E:
〔U,RFDFR〕URFDFRURFDFR(v,v,v,v,v,v,v,v);
公式E分别对c和c进行逆时针和顺时针旋转。
寻找棱块的旋转公式
M和U分别执行4次会恢复,那么MU执行四次,即,(MU)是什么呢?
我们神奇的发现:
(MU)FBLFBDFBRFBU(w,w,w,w,w,w,w,w,w,w,w,w)
即,(MU)只对e,e,e0,e旋转;
同样,(MU):
(MU)FBLFBDFBRFBU(w,w,w,w,w,w,w,w,w,w,w)
即,(MU)只对e,e3,e0,e旋转;
因为棱块旋转2次就等于没有旋转,于是(MU)和(MU)的复合结果只对e和e进行旋转,这就是公式F:
(MU)(MU)(w,w,w,w,w,w,w,w,w,w,w)
可以验证:
暴力搜索
两轮换称为对换,在魔方群中单独的对换操作,是不可能的因此三轮换,成立公式构造的关键,除了上面利用性质1来找寻三轮换的方法为,我们还可以用计算机,进行暴力搜索。例如:在2个R,3个R,3个U,2个U的全排列中,进行三轮换搜索:
我们得到:
即,RURURURURU(eee)。然后根据性质2,利用R将这个三轮换,换到同一个面上:
同样,将开头的5个R合并,就得到和公式D类似的公式:
RURURURURUR(eee)
对于旋转来说,以上的分析,最少只能的道两个角块(或棱块)的旋转,我们无法做到仅仅旋转一个角块(或棱块)。
上面,给定的公式都保证角块(或棱块)的旋转时,所有小块位置不变,但实际上,不一定需要这么严格,我们可以允许与旋转小块同处一个面内小块的位置变换。通过暴力搜索,我们得到了公式B:
即,
RURURUR(cc)(cc)(eee)(v,v,v,v,v,v,v,v);
以及,公式A:
即,
FRURUF(cc)(cc)(eee)(v,v,v,v,v,v,v,v)(w,w,w,w,w,w,w,w,w,w,w,w);
公式AB都是只改变顶层位置的操作。
其实,公式A就是F〔R,U〕F,其中〔R,U〕:
〔R,U〕的功效是(eee),即,将顶层棱块ee和中层棱块e轮换,但副作用(cc)变动了底层。不过幸运的是,我们找到了〔F,U〕:
〔F,U〕的功效和〔R,U〕类似,而其副作也是(cc)。因为(cc)(cc)1,所以〔U,F〕的刚好可以抵消〔R,U〕的副作用。于是,我们就得到了公式A的附带公式:
〔R,U〕〔F,U〕和〔F,U〕〔R,U〕
功效分别是(eeeee)和(eeeee),即,将顶层的四个棱块与中层的棱块e轮转。
在魔方数学原理的指导下,通过这种计算机暴力搜索的方式,我们还可以找到很多有用的公式,目前紧紧OLL公式就有57个,而更多的复杂公式几百上千。
众所周知的”七步公式还原法“(层先法)就包括了从这些公式中选出来的一组基础公式(包括上面提到的公式ABCD)。(七步公式还原法,已经有条友在回答中详细介绍过了,我这里就不累述了。)
不知不觉,已经写了5千余字了。关于魔法群还有很多更深入的内容,例如:上帝数等,由于篇幅有限,这里不能一一展开,以后有机会再说。
(小石头,数学水平有限,出错在所难免,希望各位老师和同学批评指正。)
(补充20191030)
我将辅助工具的代码放在这里,以便想要自己试验的条友复制粘贴。
运行环境:chrome浏览器;
文件名:rc。html,包含代码:
consts0〔〔1,2,3,4,5,6,7,8〕,
〔1,2,3,4,5,6,7,8,9,10,11,12〕,
〔0,0,0,0,0,0,0,0〕,
〔0,0,0,0,0,0,0,0,0,0,0,0〕〕;
constU〔〔〔1,2,3,4〕〕,〔〔1,4,3,2〕〕,〔0,0,0,0,0,0,0,0〕,〔0,0,0,0,0,0,0,0,0,0,0,0〕〕;
constD〔〔〔5,8,7,6〕〕,〔〔9,10,11,12〕〕,〔0,0,0,0,0,0,0,0〕,〔0,0,0,0,0,0,0,0,0,0,0,0〕〕;
constF〔〔〔1,6,7,2〕〕,〔〔3,8,11,7〕〕,〔1,2,0,0,0,2,1,0〕,〔0,0,1,0,0,0,1,1,0,0,1,0〕〕;
constB〔〔〔3,8,5,4〕〕,〔〔1,6,9,5〕〕,〔0,0,1,2,1,0,0,2〕,〔1,0,0,0,1,1,0,0,1,0,0,0〕〕;
constL〔〔〔1,4,5,6〕〕,〔〔4,5,12,8〕〕,〔2,0,0,1,2,1,0,0〕,〔0,0,0,0,0,0,0,0,0,0,0,0〕〕;
constR〔〔〔2,7,8,3〕〕,〔〔2,7,10,6〕〕,〔0,1,2,0,0,0,2,1〕,〔0,0,0,0,0,0,0,0,0,0,0,0〕〕;
functionperform(state,。。。operations){
for(vargofoperations){
varnewstate〔g〔0〕。reduce((l,c)permute(l,c),state〔0〕),
g〔1〕。reduce((l,c)permute(l,c),state〔1〕)〕;
newstate〔2〕turn(state〔0〕,state〔2〕,newstate〔0〕,g〔2〕,3);
newstate〔3〕turn(state〔1〕,state〔3〕,newstate〔1〕,g〔3〕,2);
}
}
functionpermute(location,cycle){
varnewlocationArray。from(location);
for(vari0;iarr。reduce((s,x)s
(x〔0〕instanceofArray?〔(x。map(yy。join())。join()())〕:
(x。length0?〔〕:(x。join()))),)
。replace((0,0,0,0,0,0,0,0),())
。replace((0,0,0,0,0,0,0,0,0,0,0,0),());
constc(。。。ops)str(compose(。。。ops));
constUUcompose(U,U),UUUcompose(U,U,U);
constDDcompose(D,D),DDDcompose(D,D,D);
constFFcompose(F,F),FFFcompose(F,F,F);
constBBcompose(B,B),BBBcompose(B,B,B);
constLLcompose(L,L),LLLcompose(L,L,L);
constRRcompose(R,R),RRRcompose(R,R,R);
constcycle(。。。x)〔〔x〕,〔〕,s0〔2〕,s0〔3〕〕;
constM〔〔〕,〔〔2,4,12,10〕〕,〔0,0,0,0,0,0,0,0〕,〔0,1,0,1,0,0,0,0,0,1,0,1〕〕;
constMMMcompose(M,M,M);
functionperm(arr,callback,index){
varswap(a,i,j,t)(ta〔i〕,a〔i〕a〔j〕,a〔j〕t);
indexindex0;
if(index
文件名:rc2。html,包含代码:
functionperm(arr,callback,index){varswap(a,i,j,t)(ta〔i〕,a〔i〕a〔j〕,a〔j〕t);indexindex0;if(index{vargcompose(。。。x);console。log();if(g〔0〕。length0g〔1〕。length1g〔1〕〔0〕。length3g〔2〕。toString()s0〔2〕。toString()g〔3〕。toString()s0〔3〕。toString()){console。log(x。reduce((y,z)yz。tag,));}});
雅思口语分类词汇:饮食词汇大全餐具:咖啡壶咖啡杯towelnb……
出国银行卡选用到国外旅游和探亲,或子女在国外求学,在国外如何消费和使用现金成为人们关心的问题。业内人士认为,持有一张国际银行卡可以“万无一失”。据介绍,国际卡是国内商业银行与……
社交口语100句问候语(Greeting)社交口语100句问候语(Greeting)1Hello!Nicetomeetyou。你好,很高……
邹恒甫曝“北大淫棍多”现新证据:副教授致。。。2014121009:25:33〔来源:大众网〕〔责编:沈田〕字体:【】2014年8月20日邹恒甫一审被判通过微博向北大道歉,持续7天。12月9日,邹恒甫与北……
美国名校更加重视面试美国留学申请难度加大每年的5月是一个承上启下的月份,上一年的录取已进入尾声,新一年的申请又要拉开帷幕。追溯每年申请过程,面试被认为是非常有美国特色的一个环节,从2014年开始,美国一些顶尖大学申请……
留学澳大利亚生活指南必读受到不同的文化背景以及生活方式的影响,许多中国学生们或者中国移民们在刚到澳大利亚时会感觉到不适应。为了让大家更好地享受澳大利亚留学生活,现在我们就来看看澳大利亚生活指南吧!……
赴澳洲留学如何选择学校近年来,随着澳大利亚政府对留学生政策的放松以及澳大利亚移民政策对留学生的吸引,中国赴澳洲留学人数明显增多。赴澳洲留学生选择一个好的学校接受教育会终生受益,反之,择校失误将会后悔……
雅思分类词汇报刊常用语n。特派记者n广告……
移民澳洲的福利20138714:11免费医疗凡是澳洲的永久居民,都受到政府医疗保健计划的保障,政府支付全部或大部分的医疗费用。澳洲于1984年实施全面健康保健计划,由政府负担绝大……
出国旅游预订机票口语大全出国旅游预订机票口语大全机票百科自助出国旅行,预定机票成为顺利出……
留学签证存款证明要去美国留学办理签证不知道提供多少存款证明才合适,有的说30万有的说50万,到底多少才比较合适呢?不管是美国留学申请还是美国留学签证申请,都需要提交资金证……
工薪家庭留学全指南:法公立院校免学费小言出生在一个普通的工薪家庭,专科毕业。为了实现自己的留学〔微博〕梦想,申请了爱尔兰唐道理工学院。在爱尔兰读本科,一年的学费加上生活费只需15万18万元人民币。除了学习,小言还……