-
1 # 瘋評科技
-
2 # 中學數學深度研究
生活中,我們或多或少都接觸過魔方。魔方(Rubik’s Cube),最早被稱為“魔術方塊”,與中中國人發明的“華容道”、法中國人發明的“獨立鑽石”一起被稱為智力遊戲界的三大不可思議。魔方,英文名為Rubik"s Cube,又叫魯比克方塊,最早是由匈牙利布達佩斯建築學院厄爾諾·魯比克(又稱作厄爾諾·盧比克)教授於1974年發明的。魔方競速是一項手部極限運動。因為足夠多變,複雜燒腦,能獨立還原之人少之又少。因此,在很多人眼裡“會玩魔方”= 高智商。
當時是為了幫助學生更好地認識空間立體幾何。後來他在魔方的6個面塗上不同顏色,轉動數步之後,魔方被打亂,但想要復原至初始狀態是有一定難度的。有商人敏銳地嗅到其中的商機,成功地將魔方作為一種益智玩具推向全世界,與華容道、獨立鑽石並稱世界三大智力遊戲。
魔方的冷知識別看個頭小,魔方可擁有43,252,003,274,489,856,000 種變化!來試試看你能答對幾條關於魔方的冷知識吧!
1.三階魔方一共有多少塊?
“這太好算了,3x3x3=27塊!”
魔方的構成 三階魔方是由 3×3×3-1=26 個小方塊組成的立方體,有 6 個面(還原之後每個面顏色相同,共 6 種顏色),每個面有 9 個 小面,共 54 個小面。26 個小方塊包括 6 箇中心塊(僅一個可見 面)、12 個稜塊(兩個可見面)、 8 個角塊(三個可見面)
2.世界上覆原魔方時間最久的是多少?
“肯思考的話,估計也就一兩個月吧”
No No No,英國《每日郵報》報道,英格蘭漢普郡的建築工人帕克從1983年買下魔方開始,一直在為復原魔方努力,歷經26年、2.7萬個小時後終於成功。他也成為了世界上解開魔方用時最長的人(這樣的世界紀錄筆者可不想要)
3.最高階的魔方有多大?
“五階?不能比七階多了吧....”
目前可以批量生產的最高階魔方已經達到了17階,有些愛好者甚至自己用3D列印機制作了33階魔方哦~(這轉起來可真是個體力活....)
4.什麼樣的人魔方玩的快?
“成年人?天才吧……”
這就更是大錯特錯啦,包攬多項世界魔方賽冠軍的“菲神”是“90後”,很多“00後”、“10後”更是成績超過成年人,並且玩起了“異型魔方”,這都和他們日常的勤奮練習分不開。聽說“菲神”備賽的時候一天要練習十個小時,果然是臺上四秒鐘,臺下十年功啊。
基本原理有限中蘊含著無限:魔方是有限塊體單元的有序組合,可以有無限的變化。
無限中蘊含著有限:無限萬化的魔方組合中蘊含有限的規律與本質核心。
魔方具有深刻的哲學寓意,既有隱性的內在規則與核心本質,又有顯性的形式變化。用魔方類比學習生活,形象的闡釋生產生活中蘊含的道理,便於理解和應用。
拆解魔方的過程,就是一個逐漸精簡知識/問題現象的過程,逐漸接近知識/現象/問題的本質核心。拆解魔方的過程形象的解釋了“為道日損”的含義,最後整體的魔方變形離散單元的時候,恰好解釋了“道在其中,而不見其形”的含義。
組裝魔方的過程就是從認知原點/知識原點逐漸增加知識/現象/問題複雜性的過程,使問題更加完善。組裝魔方的過程形象的解釋了“為學日益”的含義,最後離散單元有序組合成整體的過程,充分體現了“現象是離散單元有序組合”的含義。
轉動魔方的過程,就是一個分析問題、理解問題,解決問題的過程,感知-觀察-測量-分析-試驗-內化-理解-判斷-選擇-實踐-評價-內省的過程。經過刻意學習和練習,就會形成完整的思考迴路,形成清晰的思路和操作方法,經過刻意的練習,使魔方從有序到無序,從無序到有序,完成從生手-新手-熟手-高手的轉變。如果不去認真思考,專心學習,刻意練習,實踐反思,就會處於混沌狀態中而不能自拔。
常見三階復原的方法魔方有很多種類,三階是最基礎的一種,其他種類的魔方很多都是三階的變形,比如二階、四階、棕子魔方等,通過類比三階魔方,可以舉一反三,將其他魔方降階為三階,還原其主體部分,剩下的部分只需要解決當前這種魔方的某些特殊情況即可。
魔方有一套完整、簡潔、準確、美妙的表達系統。利用前(Front)、後(Back)、左(Left)、右(Right)、頂(Up)、底(Down)這六個面(side)的英文單詞首字母大寫來表示某個面的轉動。同時,每個面的旋轉又有兩種方向:順時針和逆時針,在右上角標記",則為逆時針旋轉90度,若沒有標記,則為順時針旋轉90度。所以,R U R"的含義是:首先將右面順時針旋轉90度,再將頂面順時針旋轉90度,最後將右面逆時針旋轉90度。此外還有更多轉動的符號表達,如雙層、中層、整體轉動等,本文只是簡介,不再贅述。
層先法:魔方有三層,層先法則是一層一層地還原,也是魔方最流行的初級復原方法,有些朋友“復原”第一面的方法,其實層先法的前幾步比較相似。掌握基礎的層先法後可以通過學習更多case的公式,升級為CFOP法,這也是目前速擰專案應用最廣泛的復原方法。
橋式:這種解法先搭建兩個1×2×3的塊(也就是“橋”),然後再復原剩下的4個角、6個稜及4箇中心塊。其主要特點有:靈活,公式量少,步數少,但由於需藉助更強的觀察能力和預判能力,且相對來說不易理解,不太適合初學者直接上手。也正是因為其搭橋的方式很靈活,掌握之後或許能展現出比CFOP更加強大的威力。
角先法,稜先法:顧名思義,先復原角塊或稜塊,在某種意義上,盲擰採用的就是這類方法。
玩魔方必知的心理學理論心理學家維納說:成敗=能力+努力+難易+運氣+(身心+環境),而這六種因素分別有什麼特點,我來畫張示意圖:
魔方中的數學1.魔方中的排列組合
由排列組合中的乘法和加法原理可知,三階魔方共有 8!×38×12!×212 3×2×2 種狀態。除去被軸固定的 6 箇中心塊外,剩 餘 20 個小塊, 8 個角塊放在 8 個角位置,全排列為 8!,每個 角塊的三種顏色因為方向的不同又有 3 種方法,因此共有 8!× 38 種排列;同理,12 個稜塊共有 12!×212 種排列。
但是魔方還原 過程中,保持其他小塊不動時,不可以單獨改變一個角塊的朝 向,不可以單獨改變一個稜塊的朝向,也不可以單獨交換一對 稜塊或一對角塊的位置,因此需要除去 3×2×2。由此可見,要憑 運氣把一個顏色斑駁的魔方還原成同面同色幾乎是不可能的。
2.魔方的對稱性
對稱是一個幾何圖形 Φ 的如下性質:在某個變換群 G 的 作用下, Φ 被對映到自身上,這個群稱為對稱群。如果變換群 G 是一條直線,那麼幾何圖形 Φ 就是關於直線 G 的對稱圖形;如 果變換群 G 是一個點,那麼幾何圖形 Φ 就是以點 G 為中心的 對稱圖形。
若以點 G 為中心的對稱圖形 Φ 在平面內繞著 G 旋 轉 360°/n(n 是一個整數)後與自身重合,那麼 Φ 有一個 n 階對 稱,且 G 稱為其對稱中心。如圖 a, b, c 分別是以 O 為中心的 2 階、 4 階、 3 階對稱。這樣的對稱性在正方體中完全展現,只是此 時繞平面內某點的旋轉換成了空間中繞某直線的旋轉。
三階正方體魔方具有 2 階、 3 階、 4 階對稱軸,這樣的對稱 性是除了球體以外的其他物體所不能比擬的。魔方的還原過 程就在於旋轉中魔方色塊位置的交換,對於魔方每層每次的旋 轉都是繞著該層中心塊的變換,這樣的保持點間距離不變的空.
3.魔方群
魔方的轉動是指將魔方某個面上的所有塊順時針(面對該面)旋轉 90°。相應的,若是逆時針旋轉則稱為逆轉動。為了記錄下轉亂、復原的過程,習慣上採用由 David Singmaster 發明的符號來書寫。以英文 Up(上)、Down(下)、Front (前)、Back(後)、Left(左)、Right(右)的第一個字母分別表示魔 方的上、下、前、後、左、右六個面的轉動;用小寫字母 u、 d、 f、 b、 l、 r 表示各面及相應的中心塊;用 xy 來表示位於 x 面 y 位置的 稜塊小面,如 uf 表示 u(上)面 f(前)位置的小面;用 xyz 表示位 於 x 面 yz 位置的角塊小面,如 ufr 表示位於示 u(上)面 fr(前 右)位置的小面。
在對魔方任意一個面進行轉動的時候,該面所在層的中心 塊不會改變,其餘 20 個小面的位置隨之發生改變,這樣的轉動 可以用一系列小面的置換來表示:U=(ulb ubr urf ufl )(ub ur uf ul)(bul rub fur luf)(bu ru fu lu)(bru rfu flu lbu) D=(dbl dlf dfr drb)(db dl df dr)(bld lfd frd rbd)(bd ld fd rd)(bdr ldb fdl rdf) F=(flu fur frd fdl)(fu fr fd fl)(ufl rfu dfr lfd)(uf rf df lf )(urf rdf dlf luf) B=(bul bld bdr bru)(bu bl bd br)(ulb ldb drb rub)(ub lb db rb)(ubr lbu dbl rbd) L=(luf lfd ldb lbu)(lu lf ld lb)(ufl fdl dbl bul)(ul fl dl bl)(ulb flu dlf bld) R=(rfu rub rbd rdf)(ru rb rd rf)(urf bru drb frd)(ur br dr fr)(ubr bdr dfr fur)
設 G= U, D, F, B, L, R 是魔方所有轉動生成的集合,可以 證明該集合以合成作為運算構成一個群,稱為魔方群。它是上 述一系列小面的置換作為生成元的一個迴圈群。G 中的元素代表了所有置換的情形,魔方變換的所有狀態 都能夠找到與之相應的元素,魔方從還原狀態經過一系列變化 再次還原,實現了一次迴圈,實際也是 G 中的元素經過週期性 的操作能夠實現的,從中可以看到魔方還原與迴圈群的共性。
結語當初厄爾諾·魯比克教授發明魔方,就是將其作為幫助學生增強空間思維能力的教學工具。經過觀察、分析,我們不僅可 以找到魔方中蘊涵的數學知識,也看到了魔方中的教學因素:通過魔方的外觀展示和結構剖析幫助學生建立立體模型的概 念,增強空間觀念,通過魔方還原有助於學生深刻感受置換、迴圈,理解群論的相關概念,從外觀一個簡單的立體圖形,到還原 過程中的各類變換 有助於學生邏輯思維能力的學習和提升。
-
3 # 學趣樂園
魔方被稱為“智力遊戲界的三大不可思議”之一,是由匈牙利布達佩斯建築學院的厄爾諾·魯比克發明的。他所發明的就是最常見的三階魔方,由6箇中心塊,12個稜塊,8個角塊組成。最初,魯比克教授發明魔方就是作為教具讓他的學生去理解空間結構的。誰知,這一發明卻很快風靡全球。
自從魯比克教授開始在全世界推廣魔方之後,各種各樣的魔方不斷被髮明出來。現在的正階魔方已經可以做出33階魔方了,中國量產的最高階魔方是17階魔方。而且,現在質量最好和速擰最好的魔方都是中國製造的。隨著魔方做的越來越好,復原魔方的時間也在不斷的被重新整理。現在,最快復原三階魔方也僅僅只需要三四秒鐘,比賽的魔方種類也越來越多。
就算沒有玩過魔方的人也知道,魔方的復原是有公式的。而這些公式則是由數字和字母組成的,轉動不同的面或不同的層都有對應的字母,學會認識這些字母才能更好的學會復原魔方。
復原三階魔方最基礎的方法是層先法,也就是一層一層的做。現在層先法最常見的步驟是需要七大步就可以還原整個魔方,而且基礎的方法也不需要記很多公式。只要用心去學習,還是比較容易學會三階魔方的。
路過的小夥伴們,你們會哪些魔方呢?
-
4 # 思考思考的動物
(小石頭,站在偏數學的角度,來回答這個問題。簡單一句話,魔方的原理就是:魔方群在狀態集上的作用,具體回答如下:)
魔方群
整體來看,魔方(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),
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),
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:[[角塊定位], [稜塊定位], [角塊定向], 稜塊定向]
宣告 魔方初始狀態 s₀ 如下:
魔方操作(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⁻¹:
它們,有共同的輪轉 (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,包含程式碼:
<script>const s0 = [[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]]; const U = [[[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]];const D = [[[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]];const F = [[[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]]; const B = [[[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]];const L = [[[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]];const R = [[[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]];function perform(state, ... operations) {for(var g of operations) {var newstate = [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);state = newstate;}return state;}function permute(location, cycle) {var newlocation = Array.from(location);for(var i = 0; i < cycle.length - 1; i++) {newlocation[cycle[i] - 1] = newlocation[cycle[i+1] - 1];}newlocation[cycle[cycle.length - 1] - 1] = location[cycle[0] - 1];return newlocation ;}function turn(oldlocation, oldorientation, newlocation, spin, mod) {var neworientation = [];for (var i = 0; i < newlocation.length; i++) {var j = oldlocation.indexOf(newlocation[i]);neworientation[i] = (oldorientation[j] + spin[i]) % mod;}return neworientation;}function parse(state) {return [parse_cycle(state[0]), parse_cycle(state[1]), Array.from(state[2]), Array.from(state[3])];}function parse_cycle(location) {var flags = [], cycles = [];for (var i = 0; i < location.length; i ++) {if (i + 1 != location[i] && !flags[i]) {var cycle = [i + 1, location[i]], j = location[i] - 1;while(true) {flags[j] = 1;if (location[j] == i + 1) break;cycle.push(location[j]);j = location[j] - 1;}cycles.push(cycle);}}return cycles;}function compose(... operations) {return parse(perform(s0, ... operations));}const str = arr => arr.reduce((s, x) => s + (x[0] instanceof Array ? "[(" + x.map(y => y.join(" ")).join(")(") + ")]" : (x.length == 0 ? "[]" : "(" + x.join() + ")")), "").replace("(0,0,0,0,0,0,0,0)", "()").replace("(0,0,0,0,0,0,0,0,0,0,0,0)", "()");const c = (... ops) => str(compose(... ops)); const UU = compose(U, U), UUU = compose(U, U, U);const DD = compose(D, D), DDD = compose(D, D, D);const FF = compose(F, F), FFF = compose(F, F, F);const BB = compose(B, B), BBB = compose(B, B, B);const LL = compose(L, L), LLL = compose(L, L, L);const RR = compose(R, R), RRR = compose(R, R, R);const cycle = (... x) => [[x], [], s0[2], s0[3]];const M = [[],[[2,4,12,10]],[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1]];const MMM = compose(M, M, M);function perm(arr, callback, index){var swap = (a, i, j, t) => (t = a[i], a[i] = a[j], a[j] = t);index = index || 0;if (index < arr.length) {for (var j = index; j < arr.length; j++) {swap(arr, index, j);if (perm(arr, callback, index + 1)) return true;swap(arr, index, j); } }else {return callback(arr);}}</script>檔名:rc2.html,包含程式碼:
<script>function perm(arr, callback, index){var swap = (a, i, j, t) => (t = a[i], a[i] = a[j], a[j] = t);index = index || 0;if (index < arr.length) {for (var j = index; j < arr.length; j++) {swap(arr, index, j);if (perm(arr, callback, index + 1)) return true;swap(arr, index, j); } }else {return callback(arr);}}R._tag = "R"; RRR._tag = "R⁻¹"; U._tag = "U", UUU._tag = "U⁻¹";perm([RRR, UUU, R, U, RRR, UUU, R, U, R, UUU], x => {var g = compose(... x); console.log("+");if (g[0].length == 0 && g[1].length == 1 && g[1][0].length == 3 && g[2].toString() == s0[2].toString() && g[3].toString() == s0[3].toString()) {console.log(x.reduce((y, z) => y + z._tag, ""));return true;}});</script> -
5 # 一杯不醉
三階魔方
首先要知道魔方是由厄爾諾·魯比克在1974年發明的,又以魯比克來命名魔方,叫魯比克魔方(英文名Rubik"s Cube)。魔方的所有變化數量43,252,003,274,489,856,000種。如果你一秒可以轉3下魔方,不計重複,你也需要轉4542億年,才可以轉出魔方所有的變化,這個數字是目前估算宇宙年齡的大約30倍(魔方只有26個塊)。而每個形態對應的公式,公式後又出現的形態,真的是千變萬化。三階魔方基本有無數種還原方法。而事實上上帝之數20步就能還原魔方。
還原魔方的幾種解法魔方還原的解法有很多種,常用的有層先法、高階玩法、稜先法、角先法和橋式解法等等。
不管轉動任何一個面,有2就轉動兩下,沒有就轉一下。如果沒有帶“丶”記號的就是正轉,可了理解為順時針轉動或者擰緊瓶蓋,擰緊螺絲等。帶“丶”記號的則反之。
回覆列表
永遠在固定位置,這也是還原魔方的最核心依據。因此需要考慮的如何去轉動還原其它8個角塊,12個稜塊,最終沿著這些思路而想出各種不同的解法。
這麼多種變化。
魔方的分類魔方按照形狀可分為正階和異性魔方兩種。
正階魔方
異性魔方
不規則的魔方就叫做異形魔方,各種各樣,也比較有意思,有幾十種之多。
魔方的還原方法我們在電視上可以看到會玩的人還原的非常快,只有幾秒鐘,這都是高階還原方法,對於新手剛入門,可以通過入門方法還原,幾天即可自學會,剛學會,五六分鐘完全可以復原。
初級還原方法——層先法
層先法,顧名思義就是一層一層的進行還原。
這個沒什麼特別的方法,就是熟能生巧了,當然有一點點空間想象力會好一點。
高階還原方法——CFOP
高階還原方法就主要是記公式了,大概119個公式,有的公式非常長,通過配合魔方手法的肌肉記憶,並不難。
①對好底層十字
②復原前兩層
④對好頂層順序
魔方比賽魔方比賽主要分為速擰和盲擰兩種。
這個很好理解,速擰就是在隨機打亂公式打亂下比拼復原速度,分單次成績和平均成績。
盲擰就是盲眼比賽,可以有15秒的觀察時間,計入成績時間內。
魔方的原理就是通過固定一些中心塊或者固定幾對中心塊的相對位置,再進行復原的方式,或通過總結經驗,或通過計算機計算出最優解,形成固定公式來解。