解魔方算法/thislethwaite解魔方算法/降群法

嗑药的皮皮虾 嗑药的皮皮虾     2022-12-12     728

关键词:

0.前言

主流的魔方解法,从入门的层先法,到进阶的CFOP、桥式乃至盲拧,都是从部分到整体的思路,逐块逐层还原魔方。但是Thislethwaite法不同,Thislethwaite法从整体出发,不断降低魔方的混乱程度,最终达到的可以轻松复原的效果。Thislethwaite法又简称TM法、降群法。

1.魔方基础知识

需要了解的知识有:魔方状态表示法/魔方状态字符串/解魔方步骤字符串

1.1魔方各面表示

根据魔方各面所处位置将三阶魔方六个面分别用六个大写英文字母进行表示,相应面上的颜色也分别用这六个大写英文字母进行表示。

 

 

魔方六个面对应的大写英文字母及颜色

顶面Up

底面Down

前面Front

背面Back

左面Left

右面Right

UDFBLR
白色黄色绿色蓝色橙色红色

1.2 组成魔方的小方块

        一个三阶魔方可分为三层,顶层、底层和中间层。有六个面,每个面9个色块,一共54个色块。总共由26个小方块组成,根据魔方每个小方块所处的位置可分为三种小方块,分别是中心块、棱块和角块。中心块有6个,每个中心块上只有一种颜色,只需用一个大写字母表示,魔方在旋转过程中中心块的相对位置都是不会变的。棱块有12个,棱块处于每条边的中间位置,每个棱块有两种颜色,用两个大写字母表示。角块有8个,每个角块3种颜色,用三个大写字母表示。

1.3 魔方状态字符串

        可以用一串大写英文字母表示一个三阶魔方的状态,一个已经还原好的魔方可以用这样一串字符表示:UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR。

        这种表示法是由一个叫Mike Reid的魔方爱好者首先使用的,它表示一个已经被解好的魔方。因为六个不同颜色中心块在任何旋转过程中相对位置都是不会变的,所以没有单个字符。这串标准字符中12个双字符表示魔方的12个棱块,每个棱块两种颜色。8个三字符表示魔方8个角块,每个角块三种颜色。对照这个标准字符串,一个打乱的魔方的两个中心块所夹的棱块可以表示出来,三个中心块所夹的角块可以表示出来。

不理解的朋友还可以看看这篇博客:http://www.diy-robots.com/?p=282

1.4 拧魔方动作表示/解魔方步骤字符串

        拧魔方的动作用各个魔方面代表的字符加顺时针旋转的次数表示,如R1表示R面即右面顺时针旋转一次,R2表示R面顺时针旋转两次,R3代表R面顺时针旋转三次,也即逆时针旋转1次。

        解魔方步骤字符串:U1D3F2L3B3F3U1L1D1L2U1F2R3U3B2L2U3F2U1F2L2F2D2L2B2D2L2U2F2U2

2.Thislethwaite算法/降群法

普通解法是通过逐块(by piece or block or layer)还原来减少下一步剩余块的排列数,最后所有块还原。Thistlethwaite方法则与此有本质的不同。魔方的任何一种块排列状态与魔方群的群元素是一一对应的。Thistlethwaite方法的思想就是逐步降解魔方所处的群到更小的子群,最后到单位子群,也即还原状态。所以在还原的每一步实体魔方看起来还是乱的,但实际上状态数是随所处的群的减小而规则的减小的。考虑到有些朋友不熟悉群论的语言,我就加个形象点的解释帮助理解。如果魔方通过<U,D,L,R,F,B>六个基本动作打乱,那么它的混乱状态可以达到最大,有10^20次方种。但假如我只用<U2,D2,L2,R2,F2,B2>来打乱魔方,显然魔方没有前一种情况乱,只有60万种。极端一点的,我只用R转动打乱魔方,那么魔方就只有四种混乱状态。上面这个逐步降解到子群的过程,就是把魔方由最大打乱状态一步一步的变到更小的打乱状态,最后达到复原状态。

这个表是魔方在相应子群时的状态数:

子群组合数

G0=<U,D,L,R,F,B>

4.33*10^19

Phase 1:G0->G1

 

G1=<U,D,L,R,F2,B2>

2.11*10^16

Phase 2:G1->G2

 

G2=<U,D,L2,R2,F2,B2>

1.95*10^10

Phase 3:G2->G3

 

G3=<U2,D2,L2,R2,F2,B2>

6.63*10^5

Phase 4:G3->G4

 

G4=<I>

1

有兴趣的朋友可以学习用降群法解三阶魔方,更好的理解降群法和群论。

相关降群法解魔方网站: https://www.jaapsch.net/puzzles/thistle.htm

3.基于降群法的C++程序

该程序是从这个网站下载的 https://tomas.rokicki.com/cubecontest/winners.html

我选择的是第二位pochmann写的C++程序,我在VS2017上运行,下载后需要修改才能运行,程序输入的是魔方状态字符串,输出的是解魔方步骤字符串。我分享下我修改后的给大家,文件中还有降群法介绍和使用降群法解魔方教程。

网盘链接:https://pan.baidu.com/s/1ppfP1Rn81X0W8l2CYPFZZQ      提取码:3wxt 

CSDN链接:https://download.csdn.net/download/qq_42053235/14956295

在主函数main.c中修改乱序魔方状态字符串,运行后输出一串解魔方步骤字符串和运行程序时间。

需要根据实际魔方状态修改魔方状态字符串   argv = "UF","DB","UB","UL","BR","DF","FR","UR","DR","FL","DL","BL", "RBU","DBR","UBL","ULF","RFD","UFR","LDF","BDL" ;   //乱序的魔方状态表示

4.验证生成的解魔方步骤的正确性

本人编写了魔方动态还原过程仿真MATLAB程序,手头没有魔方的朋友可以试试,对着解魔方步骤手拧魔方也容易出错,仿真非常方便,对照我写的文章看看和下载程序。

文章:https://blog.csdn.net/qq_42053235/article/details/113398226

想做解魔方机器人的朋友可以看看别人的文章:http://www.diy-robots.com/?cat=3

我本人也做了一个解魔方机器人,有空写文章分享给大家。

牛逼!解魔方神器github开源了!

梦晨发自凹非寺量子位报道|公众号QbitAI魔方解不开了怎么办,让程序来帮你。只需用摄像头把魔方的六个面扫描一遍就能直接给出还原步骤。即使你的魔方不是标准配色或房间的照明情况特殊也可以通过颜色校准模式来识别... 查看详情

拆车炸机毁魔方,这个疯狂的算法竞赛少年目的是这样的…

2021年10月20日,在多媒体方向学术盛会ACMMultimedia2021上,阿里巴巴淘系技术与浙江大学联合举办的直播中多模态商品识别Workshop暨第二届淘宝直播商品识别大赛圆满结束,并进行了现场颁奖。我们和来自中科院计算所的... 查看详情

算法:九宫格问题--奇数阶魔方(magic-square)(代码片段)

一、魔方介绍  魔方(这里是简称,也可以叫幻方、魔术矩阵,MagicSquare)是n×n正方形网格(n为每侧的单元数),里面每个单元格填充了不同的正整数1,2,3,...,n2,并且每一行、每一列和对角线中的正整数之和相等。每行、... 查看详情

星云精准测试之用例魔方

...试的整体架构图:  大家首先可能会比较好奇,“用例魔方”的概念是怎么来的?测试用例魔方是在精准测试的设计、开发和商业实践中自然产生的功能集合的一个统称。当我们把精准测试的和用例分析相关的功能画成架构图... 查看详情

alexfung魔方转法学习记

我学了AlexFung魔方转法,这是一种精确的数学法,且是一种思路,一个系统解决方案,一种原理,不用死记硬背公式。这是一篇学习记,所有用到的算法必须去原文查看具体的数学公式和JavaApplet的演示。因为我还不会编程演示,... 查看详情

算法第五章|回溯算法

算法第五章|回溯算法一、 回溯算法回溯法有“通用的解题法”之称。可以系统地搜索一个问题的所有解或任一解,是一个既带有系统性又带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根节点出发搜... 查看详情

算法中搜索的艺术

...队列为空则失败。Puzzle问题输入:具有八个小方格的魔方。输出:经过移动使得魔方呈现以下状态。可以转换成树的搜索问题:我们可以将移动的方法来作为判断的标准,比如在移动第一个图的时候,我们可... 查看详情

c_cpp拉斯维加斯算法不会得到不正确的解。一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解。但有时用拉斯维加斯算法找不到解。与蒙特卡罗算法类似,拉斯维加斯算法找到正确解的概率随着它所用的计算时(

查看详情

模拟退火算法

一.爬山算法(HillClimbing)介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。爬山算法实现很简单,其主要缺点是... 查看详情

随机算法与近似算法

参考《算法设计技巧与分析》近似算法为求近似解的算法度量标准:相对性能界,RA=A(I)/OPT(I)  (最小化问题)或RA(I)=OPT(I)/A(I)(最大化问题),越接近一越好代表的算法有背包问题,装箱问题(FF首次适应,BF最佳适应,FFD... 查看详情

爬山算法和模拟退火算法简介

...http://www.cnblogs.com/chaosimple/archive/2013/06/10/3130664.html一.爬山算法(HillClimbing)        介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一... 查看详情

空间谱常见解相参(干)算法

一、常规解相参算法  解相参(干)算法主要有时间平滑类,TOEP类、空间平滑类3种。1)时间平滑类基于多径信道的衰落特性,将快拍所得的数据分块,并对每块求和平均,以此降低各方向来波的相关性,该类方法需要较大的快... 查看详情

❤️六万字《算法和数据结构》之《画解数据结构》总纲,算法零基础教程❤️(建议收藏)(代码片段)

...正题。「画解数据结构」点击我跳转末尾获取粉丝专属《算法和数据结构》源码。第一章线性表❤️《画解数据结构》(1-1)画解顺序表❤️❤️《画解数据结构》(1-2)画解链表❤️❤️《画解数据结构》(... 查看详情

❤️六万字《算法和数据结构》之《画解数据结构》总纲,算法零基础教程❤️(建议收藏)(代码片段)

...正题。「画解数据结构」点击我跳转末尾获取粉丝专属《算法和数据结构》源码。第一章线性表❤️《画解数据结构》(1-1)画解顺序表❤️❤️《画解数据结构》(1-2)画解链表❤️❤️《画解数据结构》(... 查看详情

模拟退火算法和遗传算法

爬山算法? 在介绍这两种算法前,先介绍一下爬山算法。? 爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。? 爬山算法实现很简单,其主要缺点... 查看详情

小航的算法日记字符串

目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:344.反转字符串​​​​解:​​​​题:541.反转字符串II​​​​解:​​​​题:剑指Offer05.替换空格​​​​解:​​​​题:151.颠倒字符串中的单词​... 查看详情

从迷宫问题连连看红与黑说回溯算法遍历解空间

...天上午完成了“迷宫”问题,也思考了“2.5基本算法之搜索”的另外几个问题:小游戏(就一连连看),马走日,红与黑等。我所关注的这几个问题都可以用回溯算法来进行解决。回溯算法简单说就是当运行到叶子... 查看详情

小航的算法日记进制转换-入门

目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:剑指Offer15.二进制中1的个数​​​​解:​​​​题:258.各位相加​​​​解:​​​​题:1290.二进制链表转整数​​​​解:​​​​题:1837.K进制表示下... 查看详情