魔方的原理是什麼?

活動中心17653708


三階魔方

首先要知道魔方是由厄爾諾·魯比克在1974年發明的,又以魯比克來命名魔方,叫魯比克魔方(英文名Rubik's Cube)。魔方的所有變化數量43,252,003,274,489,856,000種。如果你一秒可以轉3下魔方,不計重複,你也需要轉4542億年,才可以轉出魔方所有的變化,這個數字是目前估算宇宙年齡的大約30倍(魔方只有26個塊)。而每個形態對應的公式,公式後又出現的形態,真的是千變萬化。三階魔方基本有無數種還原方法。而事實上上帝之數20步就能還原魔方。

魔方結枸

魔方有6種色6個面,國際定色:白色為底公式D,黃色為頂公式U,藍色在前公式F,綠色在後公式B,橙色在左公式L,紅色在右公式R。魔方又分為6箇中心塊(每面最中間的塊),8個角塊和12個稜塊組成。中心塊是固定的結構,靠轉動角塊和稜塊復原魔方。

還原魔方的幾種解法

魔方還原的解法有很多種,常用的有層先法、高級玩法、稜先法、角先法和橋式解法等等。

1、層先法思:①先做好底部十字,②底層角塊歸位,③第二層稜塊歸位,④做頂成十字,⑤還原頂成顏色,⑥頂層稜塊歸位,⑦頂層角塊歸位。完成復原!

2、高級玩法:①做好底部十家,②還原前兩層,③還原頂層顏色,④頂層角塊、稜塊一次歸位。完成復原!

3、稜先法思路:①底稜歸位(等同層先法十字),②邊稜歸位,③轉八角。完成復原!

4、橋式解法思路:①做好左右橋,②頂角還原,③調整顏色朝向,④6稜歸位。完成復原!

魔方轉動記號

不管轉動任何一個面,有2就轉動兩下,沒有就轉一下。如果沒有帶“丶”記號的就是正轉,可了理解為順時針轉動或者擰緊瓶蓋,擰緊螺絲等。帶“丶”記號的則反之。


一杯不醉


(小石頭,站在偏數學的角度,來回答這個問題。簡單一句話,魔方的原理就是:魔方群在狀態集上的作用,具體回答如下:)

魔方群

整體來看,魔方(Rubik's cube)是一個立方體,一共有六個面 (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},當 任意麵 f ∈ M 朝向我們時,對 f 面 順時針 旋轉 90°, 被定義為 魔方的 基本操作(base operation),同樣用 f 面 的 面標識 來表示 這種基本操作。所以 M 也代表 魔方的全部基本操作。

對於,任意 基本操作 g, h ∈ M,gh 稱為 g 和 h 的 複合(compose), 表示 先 g 操作 再 h 操作 的複合操作。可以驗證,複合滿足結合律, 這樣以來,以 M 為生成元 在複合操作下會生成一個群 G = (M),稱為 魔方群(Rubik‘s cube group)。其中,G 的 么元,記為 1, 表示 沒有進行任何操作的操作。

什麼是群?

群就是定義了一種運算 的集合 ,其 滿足:

  • 集合對運算封閉,即,對於任意 都有 ( 注意:和乘法運算類似,習慣省略不寫 ) ;

  • 運算有分配律,即, 對於任意 都有 ;

  • 有么元,即,存在 使得 對於 任意 都有 ;

  • 有逆元,即,對於任意 都存在 的逆元 使得 。

什麼是 M 生成的群?

數學上定義:包括 M 中元素的 最小的群,為M生成的群,記為 (M)。實際上,可以 對 M 中任意操作 g 和 h 不斷的 進行 複合運算,如果得到的新複合操作 gh 不在 M 中,就 gh 添加到 M 裡,直到 M 不再增加,這樣就得到了 (M)。

同一基本操作 g, 連續四次 複合 就是 對 g 面 順時針 旋轉 360°,這相當於 沒有操作,即,

gggg = 1

從而有:

gg³ = 1

也就是說 g³ 就是 g 的逆元 g⁻¹ ,相當於 對 g 面 逆時針 旋轉 90°。

另外,由 gggg = 1 還可以得到:

g²g² = 1

這說明 連續兩次 複合 g² 的逆元 就是自己,即,順時針 旋轉 180° 相當於 逆時針 旋轉 180° 。

魔方狀態

三階魔方被細分為 3 × 3 × 3 = 27 個 立方小塊(cubie)。其中,位於 中間核心的 那個 小塊 不會受到 魔方操作 的影響到,而對於 每個 面中心的 那個 小塊 魔方操作 同樣無法改變它的位置,因此 魔方操作 所能 影響到的 小塊 為 27 - (1 + 6) = 20 個。

這 20 個 受 魔方操作 作用的 小塊,又分為 兩類:

  • 位於魔方 8 個角 處的 角(corner)塊,它們有3個有效 小面(facet);

  • 位於魔方 12 個稜 處的 稜(edge)塊,它們有2個有效 小面;

由於,每個面的 中心塊 保持位置不變,因此對於打亂的魔方,可以依照 中心塊 來 確定 魔方的各個面 方向。魔方在初始(或 還原)狀態下,角塊 和 稜塊 的每個 小面 和 該小面 所在面 的 中心小塊 顏色保持一致。

我們用 角塊(或 稜塊) 的各小面 顏色所對應的 標識 的小寫字母 的組合來標識 角塊(或 稜塊):

  • 對於 角塊,三個小面 x, y, z,有 6 種排列方式,這裡 使用 從 u 或 d 開始 的 順時針 排列方式,即,角塊標識 xyz 保證 x = u/d 並且 x →y → z 是順時針;

  • 對於 稜塊,二個小面 x, y, 有 2 種 排列方式,這裡 使用 從 u 或 d(f 或 b) 開始 的 排列方式,即,稜塊標識 xy 保證 x = u/d/f/b;

根據上面的規則,八個角塊分別表示為:ufl, urf, ubr, ulb; dbl, dlf, dfr, drb; 十二個稜塊分別表示為:ub, ur, uf, ul; bl, br, fr, fl; db, dr, df, dl

注意:六個中心塊 分別表示為:u, d, f, b, l, r,核心塊 一般用 o 表示 。

更進一步,對於角塊 xyz,我們用 xyz 表示 x 小面,yzx 表示 y 小面,zxy 表示 z 小面,對於稜塊 xy ,我們用 xy 表示 x 小面,用 yx 表示 y 小面,於是,我們就得到了 帶有標註 的 8 × 3 + 12 × 2 = 48 個 小面。將,全體小面記為 T,則 任意 操作 g ∈ G 就變成了 T 上的 一種 置換(位置變換)。以 F 操作 為例,

觀察發現, 小面 fur 經過 F 操作 置換 為 小面 flu,即,F(fur) = flu,另有 F(flu) = fdl、F(fdl) = frd、F(frd) = flu,於是 在 F 操作下,以上 4 個置換 形成了 一個 置換圈:

我們稱其為 輪換(cycle),記為 (fur flu fdl frd) 。

參與輪換的 小面 可以是任意多個,值得注意的是:任何一個小面 a 的 輪換 (a) 相當於 不做 置換,有, 1 = () = (a) 。

當然,實際上 F 操作 包含 多個 輪換,將這些輪換 以複合的方式,聚合在一起,就是定義了一個 完整 F 操作:

F = (fur flu fdl frd) (fu fl fd fr)(rfu ufl lfd dfr)(rf uf lf df)(rdf urf luf dlf)

同理,我們可以將 其它魔方操作 定義為 輪換 的複合。

注意:為了方便,我們也可以用 1- 48 的 正整數,來替代 上面 S 中 對小面 的編碼。

T 上的所有 置換函數,在函數複合下,組成 置換群 S₄₈。但是,因為 角塊的面永遠置換不到稜塊的面,所以 G 僅僅是 S₄₈ 的子群。

用離散的小面來記錄魔方的狀態過於粗獷,重新審視魔方,我們會得到如下結果:

  • 每個立方塊都是一個整體,在任何魔方的操作下,組成它的小面不會分離;

  • 每個立方塊,有兩種狀態信息:位置 和 方向;

  • 角塊 和 稜塊 在 魔法操作下 相互獨立,即,角塊 永遠不可能 轉到 稜塊 上,反之亦然。

基於,以上分析,我們首先, 分別 對 角塊 和 稜塊 進行定位(location):

  • 角塊:ufl = 1, urf = 2, ubr = 3, ulb = 4; dbl = 5, dlf = 6, dfr = 7, drb = 8;

  • 稜塊:ub = 1, ur = 2, uf = 3, ul = 4; bl = 5, br = 6, fr = 7, fl = 8; db = 9, dr = 10, df = 11, dl = 12;

令 C = {1, 2, 3, 4, 5, 6, 7, 8}, 這裡包含 所有 角塊的位置信息,可以很容易將 基本操作 對 角塊位置的 改變寫成輪換形式:

U = (1 2 3 4),

D = (5 8 7 6),

F = (1 6 7 2),

B = (3 8 5 4),

L = (1 4 5 6),

R = (2 7 8 3)

顯然,G 作用在 C 上 是 置換群 S₈ 的子群。

同理,令 E = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},基本操作對於 稜塊 位置的改變寫成輪換形式為:

U = (1 4 3 2),

D = (9 10 11 12),

F = (3 8 11 7),

B = (1 6 9 5),

L = (4 5 12 8),

R = (2 7 10 6)

同樣,G 作用在 E 上 是 置換群 S₁₂ 的子群。

然後,我們分別對 角塊 和 稜塊 進行定向(orientation):

  • 角塊:u/d 為定向面,xyz = 012;

  • 稜塊:u/d/f/b 為定向面,xy = 01;

對於保持 定向 信息,我們只需要定義,定位位置 當前 立方塊 的 定向面 對應 的 編號就可以了。而對於 基本操作,對 定向的 改變,我們也只需要 記錄,原始狀態下,經過 基本操作後,各個 定位位置,的 定向面 對應 的 編號就可以了。如果,原始狀態下,即, 定向面的編號為 0,經過某操作,到新位置後,定向面編號為 n,則 原來 定向面的編號為 m,經同樣操作,到新位置後,定向面編號就是 (n + m) mod k,對於角塊 k = 3,對於 稜塊 k = 2。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 = (c₁ c₆ c₇ c₂) (e₃ e₈ e₁₁ e₇) (v₁, v₂, v₀, v₀, v₀, v₂, v₁, v₀) (w₀, w₀, w₁, w₀, w₀, w₀, w₁, w₁, w₀, w₀, w₁, w₀)

輔助工具

在進行下一步分析之前,我們先編寫一點 JavaScript 代碼,以幫助我們,對 G 中的 操作進行復合。

魔方狀態(state)的 格式為:

state:[[角塊定位], [稜塊定位], [角塊定向], 稜塊定向]

魔方操作(operation)的 格式為:

[[[角塊輪換], ...], [[稜塊輪換], ...], [角塊旋轉], [稜塊旋轉]]

聲明,在給定狀態上執行魔方操作的函數:

聲明,從給定狀態中分析出魔方操作的函數:

定義 複合 函數:

為了輸出簡潔,當所有角塊(或,稜塊)不發生旋轉 時,用一對空括號表示。

最後,我們對基本操作進行必要的擴展:

換位子 和 共軛

對於 任意兩個 魔方操作 g,h ∈ G,如果,g 和 h 的複合 滿足交換律,則:

gh = hg

等式兩邊右乘 g⁻¹h⁻¹,有:

ghg⁻¹h⁻¹ = hgg⁻¹h⁻¹ = h1h⁻¹ = hh⁻¹ = 1

如果 不滿足交換律,則:

ghg⁻¹h⁻¹ ≠ 1

令,[g, h] = ghg⁻¹h⁻¹,稱其為 換位子(commutator)。

一般來說,魔方相對面 ,如: F 和 B,U 和 D,L 和 R 之間是可以交換的,即,

[F, B] = [U, D] = [L, R] = 1

所有,換位子 之間是可以交換的,即:

[[g₁, h₁] [g₂, h₂]] = 1

關於,換位子有 性質1:如果 g 和 h 兩種操作,只 共同影響 一個 小塊 k,其中 g 為 n → k,h 為 m → k,則有 [g, h] = (k, n, m),[h, g] = (k, m, n)。

例如,若 g = (c₁ c₂ c₃), h = (c₁, c₄ c₅),則 k = c₁, n = c₂, m = c₄,於是有:

即,[g, h] = (c₁ c₂ c₄),[h, g] = (c₁ c₄ c₂)。

性質1推論:如果 g 和 h 兩種操作,共同影響 的小塊,剛好 在 g 和 h 中 分別 形成 輪換 σ 和 τ,則有 [g, h] = [σ, τ]。

例如:若 g = (c₁ c₂ c₃ c₄)(c₅ c₆), h = (c₁ c₂ c₄ c₃)(c₇ c₈),則 它們的共同影響小塊 c₁、c₂、c₃、c₄,分別 在 g 和 h 中,組成輪轉 (c₁ c₂ c₃ c₄) 和 (c₁ c₂ c₄ c₃),於是有:

即,[g, h] = [(c₁ c₂ c₃ c₄), (c₁ c₂ c₄ c₃)]。

魔方群中還有另外一種 稱為 共軛

(conjugate)的複合方式:對於 任何操作 g,h ∈ G,稱 ghg⁻¹ 為 h 關於 g 的共軛。

共軛具有 性質2:如果 h = (a b c) 而 g 將 A, B, C 分別映射到 a, b, c,則有 ghg⁻¹ = (A B C)。

例如:若 h = (c₁ c₂ c₃), g = (c₁ c₄)(c₂ c₅)(c₃ c₆),則有:

即,ghg⁻¹ = (c₄ c₅ c₆)。

魔方公式

好了!現在利用上面的知識,就可以開始構造魔方公式了。

尋找角塊的換位公式

我們發現 B⁻¹ 關於 R⁻¹ 的 共軛 R⁻¹B⁻¹(R⁻¹)⁻¹ = R⁻¹B⁻¹R:

和 F²:

僅有 c₇ 共同影響,於是它們滿足 性質1,有:

即,[R⁻¹B⁻¹R, F²] = R⁻¹B⁻¹R F² (R⁻¹B⁻¹R)⁻¹ (F²)⁻¹ = R⁻¹B⁻¹R F² R⁻¹B⁻¹R F² = (c1, c7, c8)。

注意:因為 (ab)(b⁻¹a⁻¹) = abb⁻¹a⁻¹ = a1a⁻¹ = aa⁻¹ = 1,所以 (ab)⁻¹ = b⁻¹a⁻¹。

這裡 c₁, c₇, c₈ 不共面,考慮 R² :

剛好 將 1 ↦ 1, 2 ↦ 8, 3 ↦ 7,於是根據 性質2,有:

開頭的 RR RRR = R ,於是最終得到 公式C

即,

R²[R⁻¹B⁻¹R, F²]R⁻² = RB⁻¹RF²R⁻¹BRF²R² = (c₁ c₂ c₃)

尋找稜塊的換位公式

我們定義一種新的操作 M:面對 F 面,順指針旋轉 F 和 B 面之間那個中間的面M。M 操作 只改變稜塊:

我們發現 M⁻¹(或 M)與 U²:

共同影響 e₄,因此 根據性質1,[M⁻¹, U²] 構成三輪換:

即,[M⁻¹, U²] = M⁻¹U²MU² = (e₂ e₄ e₁₀)。

其實,M⁻¹ 就相當於 FB⁻¹ 的複合,只不過,在執行 M⁻¹ 後,還做了 R 面朝向了 U 的動作。

這時 執行 U² 相當於 執行 R²,於是翻譯為 基本操作 [M⁻¹, U²] = FB⁻¹R²BF⁻¹U²,驗證:

最後, 根據 性質2,利用 R²U 將 這個 三輪換,換到同一個面上:

倒數第2, 3 項合併後,就得到了 公式D

R²U[M⁻¹, U²]U⁻¹R² = R²UFB⁻¹R²BF⁻¹UR² = (e₁ e₃ e₂)

尋找角塊的旋轉公式

觀察 D² 關於 RF⁻¹ 的共軛 RF⁻¹D²FR⁻¹:

與 U²:

它們,有共同的輪轉 (c₁ c₃),於是根據 性質1推論,有:

[U², RF⁻¹D²FR⁻¹] = [(c₁ c₃), (c₁ c₃)] = (c₁ c₃)(c₁ c₃)(c₃ c₁)(c₃ c₁) = (c₁ c₃)1(c₃ c₁) = (c₁ c₃)(c₃ c₁) = 1

這樣以來,[U², RF⁻¹D²FR⁻¹] 就沒有了位置變換,僅僅剩下的就是旋轉:

於是,我們就得到 公式 E

[U², RF⁻¹D²FR⁻¹] = U²RF⁻¹D²FR⁻¹U²RF⁻¹D²FR⁻¹ = (v₁, v₀, v₂, v₀, v₀, v₀, v₀, v₀);

公式 E 分別 對 c₁ 和 c₃ 進行 逆時針 和 順時針 旋轉。

尋找稜塊的旋轉公式

M 和 U 分別執行4次會恢復,那麼 MU 執行四次,即,(MU)⁴ 是什麼呢?

我們神奇的發現:

(MU)⁴ = F⁻¹BLF⁻¹BDF⁻¹BRF⁻¹BU = (w₁, w₁, w₀, w₀, w₀, w₀, w₀, w₀, w₀, w₁, w₀, w₁)

即,(MU)⁴ 只對 e₁, e₂, e₁0, e₁₂ 旋轉;

同樣,(MU⁻¹)⁴ :

(MU⁻¹)⁴ = F⁻¹BL⁻¹F⁻¹BD⁻¹F⁻¹BR⁻¹F⁻¹BU⁻¹ = (w₀, w₁, w₁, w₀, w₀, w₀, w₀, w₀, w₁, w₀, w₁)

即,(MU⁻¹)⁴ 只對 e₂, e3, e₁0, 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⁻¹ 的全排列中,進行三輪換搜索:

我們得到:

即,R⁻¹U⁻¹RURURU⁻¹R⁻¹U⁻¹ = (e₃ e₄ e₁₀)。然後 根據 性質2,利用 R² 將 這個 三輪換,換到同一個面上:

同樣,將開頭的 5 個 R 合併,就得到 和 公式D 類似的公式:

RU⁻¹RURURU⁻¹R⁻¹U⁻¹R² = (e₂ e₃ e₄)

對於旋轉來說,以上的分析,最少只能的道 兩個 角塊(或 稜塊)的旋轉,我們無法做到 僅僅旋轉 一個角塊(或 稜塊)。

上面,給定的公式都保證 角塊(或 稜塊)的旋轉 時,所有小塊位置不變,但 實際上,不一定需要這麼嚴格,我們可以允許 與旋轉小塊同處一個面 內 小塊的位置變換。通過暴力搜索,我們得到了

公式B

即,

RUR⁻¹URU²R⁻¹ = (c₁ c₃)(c₂ c₄)(e₁ e₂ e₄)(v₂, v₂, v₀, v₂, v₀, v₀, v₀, v₀);

以及,公式A

即,

FRUR⁻¹U⁻¹F⁻¹ = (c₁ c₂)(c₃ c₄)(e₁ e₂ e₃)(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] 的功效是 (e₁ e₂ e₇) ,即,將 頂層稜塊 e₁ e₂ 和 中層 稜塊 e₇ 輪換,但副作用 (c₂ c₇) 變動了 底層。不過幸運的是,我們找到了 [F⁻¹, U⁻¹]:

[ F⁻¹, U⁻¹] 的功效 和 [R, U] 類似,而其副作也是 (c₂ c₇)。因為 (c₂ c₇)(c₂ c₇) = 1,所以 [U⁻¹, F⁻¹] 的 剛好可以抵消 [R, U] 的副作用。於是,我們就得到了 公式A的附帶公式

[R, U] [ F⁻¹, U⁻¹] 和 [ F⁻¹, U⁻¹] [R, U]

功效分別是 (e₁ e₂ e₇ e₄ e₃) 和 (e₁ e₂ e₃ e₄ e₇),即,將頂層的 四個稜塊 與 中層 的 稜塊 e₇ 輪轉。

在魔方數學原理的指導下,通過這種計算機暴力搜索的方式,我們還可以找到很多有用的公式,目前緊緊OLL公式就有 57 個,而更多的複雜公式幾百上千。

眾所周知的 ”七步公式還原法“(層先法) 就包括了從這些公式中選出來的 一組基礎公式(包括上面提到的 公式ABCD)。(七步公式還原法,已經有條友在回答中詳細介紹過了,我這裡就不累述了。)


不知不覺,已經寫了 5千餘字了。關於魔法群還有很多更深入的內容,例如:上帝數 等,由於篇幅有限,這裡不能一一展開,以後有機會再說。

(小石頭,數學水平有限,出錯在所難免,希望各位老師和同學批評指正。)

(補充 2019/10/30)

我將輔助工具的代碼放在這裡,以便想要自己試驗的條友複製粘貼。

運行環境:chrome 瀏覽器;

文件名:rc.html,包含代碼:

文件名:rc2.html,包含代碼:


分享到:


相關文章: