CUBE ROOM / MATHEMATICS

4325 亿亿种局面,
最短的路不超过 20 步。

把每一个局面看成一个点,把每一次转动看成一条边,魔方就是一张图。左边是魔方,右边是它 54 张贴纸摊平后的样子:转动一次,右边的点就沿着它真正的轨道流动一次。

打乱它,看它怎么走回来

同一个局面的两种画法。弧线是各面转动时贴纸真正走过的轨道,中心的六个点永远不动。打乱它,让求解器找一条路,然后自己决定一步一步走,还是一次走完。
43,252,003,274,489,856,000个局面
20步:上帝之数,半圈算一步
18条边:每个局面的邻居数
6个中心点:永远不动

4325 亿亿种局面,来自一次简单的清点

魔方由 8 个角块、12 个棱块和 6 个中心块组成。六个中心块彼此的相对位置永远不变,它们定义了颜色的方向;一个局面,完全由角块和棱块的位置与朝向决定。

  • 8 个角块可以有 8! 种排列;每个角块有 3 个朝向,但最后一个角块的朝向被前 7 个决定,所以是 3⁷。
  • 12 个棱块可以有 12! 种排列;每个棱块有 2 个朝向,最后一个同样被前面的决定,所以是 2¹¹。
  • 角块的排列与棱块的排列不能各自独立地改变奇偶,因此总数还要再除以 2。
8! × 3⁷ × 12! × 2¹¹ ÷ 2 = 43,252,003,274,489,856,000

四千三百二十五亿亿,约 4.33 × 10¹⁹。换一个尺度:如果从宇宙诞生的那一刻起,每秒钟试一个局面,到今天也只试过其中约百分之一。

记住这个数字本身没有意义。它说明的是另一件事:任何依靠“多试几次”的办法都还原不了魔方。能还原它的,只有结构。

每个局面是一个点,每次转动是一条边

把每一个局面看成一个点,把每一次转动看成连接两点的一条边,魔方就变成了一张图。数学上它有个名字:凯莱图(Cayley graph)——群的元素当顶点,生成元当边。

  • 顶点:43,252,003,274,489,856,000 个局面。
  • 边:从任何一个局面出发,都有 18 条边通向 18 个邻居。六个面,每个面可以顺时针 90°、逆时针 90° 或转 180°。
  • 还原:不是“把红色对齐红色”,而是在这张图上,从你所在的点走到那个叫做“六面同色”的点。

这张图有一个关键性质:顶点传递。从任何一个顶点看出去,整张图长得完全一样。所以一个局面难不难,跟它“看起来有多乱”无关,只跟一件事有关——它到终点的距离。

上面那张图不是这张凯莱图(凯莱图画不下),而是同一个局面的另一种看法:54 张贴纸同时摊在一个圆盘上。转动一次,你能看见哪些点在动、沿着什么轨道动。

上帝之数:这张图的直径是 20

一张图的直径,是所有点对之间最短路径的最大值。2010 年,Tomas Rokicki、Herbert Kociemba、Morley Davidson 和 John Dethridge 证明了:这张图的直径是 20。

这句话的意思很强:无论魔方被打得多乱,从它到还原态,总存在一条不超过 20 步的路。没有任何局面需要 21 步。

  • 这里的“一步”指转动某一个面 90° 或 180°,半圈算一步(面转动度量)。如果规定半圈算两步,答案是 26,这个结论在 2014 年被证明。
  • 证明的办法不是逐个检查 4.3 × 10¹⁹ 个局面。他们把所有局面按一个子群的陪集分组,利用魔方自身的 48 种对称把需要逐一处理的组压缩到约 5,600 万组,再用 Google 捐赠的约 35 个 CPU 年的闲置算力跑完。
  • 统计上,绝大多数局面的最短解在 17 到 18 步之间;恰好需要 20 步的局面极其少见。

值得说清楚的是:知道“存在一条不超过 20 步的路”,和“找到那条路”是两件事。前者已经被证明,后者对每一个具体局面仍然需要搜索。

计算机不从白色十字开始

人类的层先法是一条容易记住的路线,不是最短的路线。计算机走的是另一条路,最常见的是 Kociemba 的两阶段算法。

它先定义一个子群 G₁ = ⟨U, D, L², R², F², B²⟩:在这个子群里,左右前后四个面只允许转 180°。落在 G₁ 里的局面有 19,508,428,800 个,大约 195 亿。

  1. 第一阶段:不管颜色排得好不好看,只把局面带进 G₁——把所有块的朝向摆正,把中层的四个棱块送回中层。这一阶段真正需要搜索的空间只有 2,217,093,120 种,约 22 亿,是全部局面的两百亿分之一。
  2. 第二阶段:在 G₁ 内部,用那 10 种受限的转动走到终点。

两阶段算法通常在几毫秒内给出 20 步上下的解。但要注意:它给的是很短的解,不保证是最短的解;证明某个局面的最优解需要更强的搜索。

这对正在学魔方的人意味着什么

不是让你去背 20 步。恰恰相反:

  • 层先法通常要 50 到 100 步。它比理论最优长得多,因为它用步数换记忆量——把一个 4.3 × 10¹⁹ 的问题,拆成人脑装得下的六个阶段。
  • 公式不是咒语,是一段“只改变局部、其它地方原样归位”的路径。知道它为什么能保留已完成的部分,比多背一条公式有用。
  • 卡住的时候,问题几乎从来不是“手不够快”,而是当前局面根本不满足那条公式的前提。

从“记住动作”走到“看懂结构”,是这个网站想帮你走的那一段。

这张图是怎么画出来的

图不是装饰,它和左边的魔方是同一个东西。

54 个点就是 54 张贴纸的位置,点的颜色是此刻贴在那里的那张贴纸的颜色。站在你正对着的那个角往外看:贴着这个角的三个面(上、右、前)收在里圈,背面的三个面(下、左、后)摊在外圈,六簇每隔 60° 排成一轮,六个面因此同时可见。

转动一个面,20 张贴纸沿五个四循环换位。图上每一条圆弧,恰好是其中一个四循环的轨道:那四个点严格落在同一个圆上,转动时它们就沿这个圆挨个往前滑一格。这 30 个圆是先定下来、再把 54 个点解出来的——正方形的九宫格做不到全部共圆,所以每簇被轻轻错切了一点点,换来的是每条弧都当真。共圆的误差是千分之一像素,只来自坐标写进文件时的四舍五入。

按下 R,属于 R 的那五个圆会亮起来,只有 R 层的 20 个点会动;中心的 6 个点永远不动,因为中心块不会离开自己的位置,这也正是“颜色方向由中心块定义”的原因。

页面里的求解器

“任何局面都有一条不超过 20 步的路”是被证明的事实,但对每一个具体局面,那条路仍然要找。这个页面内置了一个两阶段求解器,在浏览器里独立运行,不上传任何数据。

它不会自己演示。图示进入视野时只做三件事:在后台预热求解器、把三维魔方取过来、让魔方慢慢自转。打乱和求解都等你按下按钮。

  1. 按「打乱」:魔方走 20 步随机转动,每步约 210 毫秒,然后停下。
  2. 按「求解」:求解器在几十毫秒内找到一条 20 步上下的路——然后停在那里,一步都不走。它给的是很短的路,不保证是最短的路。
  3. 这一停是留给你想的。路径条把解法按求解器给出的分界拆成两段:前一段把局面送进 G₁,后一段只用 U、D 和四个 180°。魔方上下一步要转的那一层会描出橙边,状态图上那一层的五条圆同时提亮——只是预告,54 个点一个都不动。解法默认只露出下一步,走一步露一步;想一次看完,按「看解法」。
  4. 然后由你决定怎么走完:「走一步」一步一步来,每步约 430 毫秒;「退一步」撤回去再想一遍,计划原样保留;「一次走完」把剩下的连着播完,随时可以暂停、继续。

你也可以不按计划走。展开「自己转一步」,随便转一下,求解器会从新的局面重新规划,并写明你转了什么、新的路有多少步。它从不把这当成错误——自己动手正是这张图想要的。求解器给出的路径,和你打乱的顺序没有关系:转几步,再看它选了另一条路回家。

第一次用到求解器时,它在后台生成本文提到的那几张表:朝向与中层的转动表、剪枝表,大约一两秒;这段时间读数会说它正在准备。

颜色和转动的判定,与练习区那个 3D 魔方使用同一套模型,并与一份独立的魔方状态模型逐张贴纸交叉核对过;求解器给出的每条路,都在同一套模型上回放确认。

CUBE ROOM / PRACTICE

现在,把这一点练明白。

练习区的 3D 魔方和这张图使用同一套转动模型。先在这里看清一步转动改变了什么,再去把它做出来。

进入对应练习 →

参考与延伸阅读

本文由方寸结合站内练习独立编写。以下资料用于核对基础概念或进一步学习,并非逐字翻译;本站与资料提供方没有隶属关系。