三阶魔方还原 two phase 算法 学习笔记

本文详细介绍了魔方复原算法中的Kociemba'sAlgorithm及其应用,通过CubeExplorer软件实现魔方复原过程。文章深入分析了算法的数据结构、操作列表以及两阶段搜索策略,揭示了其高效性和简洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

twophase算法,或者Kociemba's Algorithm

wiki说,目前速度最快且解决魔方平均步骤最少的软件是Cube Explorer。【1】

以下是按照官网上作者公开的mathematica文档,对算法的分析。

文档和相关说明可以在下面的网站中找到。

http://kociemba.org/cube.htm


零.六个面表示 ,旋转相应的面对应数字

U 1,2,3
R 4,5,6
F 7,8,9
D 10,11,12
L 13,14,15
B 16,17,18


一. 数据结构

1.魔方状态表示

{{{角方块排列},{角方块旋转}},{{中间方块排列},{中间方块旋转}}}

还原状态下的魔方,其中方块的标号如下图所示

{{{1, 2, 3, 4, 5, 6, 7, 8}, {0, 0, 0, 0, 0, 0, 0, 0}},
 {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}



角方块有三面,其中必有一面属于U或D,该面朝向作为方块旋转标识,如果该面朝向为U或D则为0,否则按顺时针旋转数计算(好像这个地方也可以随意定义,因为感觉算法中用到的旋转是相对的)

中间方块同理,不过计算朝向的优先级为UD>FB>LR


2.用到的列表

 对还原状态魔方分别进行18种(6个面*3)旋转对应的魔方状态


魔方状态,18中操作下的转换,魔方状态,用排列的字典序表示,或者旋转对应的3进制或2进制数


角方块旋转与9,10,11,12方块对应位置的深度检索表(第一阶段搜索用)(A)

中间块旋转与9,10,11,12方块对应位置的深度检索表(第一阶段搜索用)(B)

角方块排列与9,10,11,12方块排列的深度检索表(第二阶段搜索用)(C)

中间块排列与9,10,11,12方块排列的深度检索表(第二阶段搜索用)(D)


二.算法部分

算法第一阶段,试图找到使 角方块和 中间方块旋转 为0 ,并且中间块9,10,11,12 按照任意排列位于9,10,11,12的位置

算法第二阶段,用4,6,7,9,13,15,16,18这8种动作之外的动作使魔方还原。因为这8种动作会导致第一阶段中已经为0的选择变为非零,并且会使9,10,11,12四个方块换到其他位置

两个阶段均类似于宽度优先搜索。作者原话是,

 iterative deepening A* with a lowerbound heuristic function (IDA*)

如果第二阶段动作书为0,也就是第一阶段就还原了魔方,那么这个结果是最优的。




【1】http://zh.wikipedia.org/zh-cn/%E9%AD%94%E6%96%B9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值