您的位置:首页 > 其它

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

2014-07-04 16:48 330 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: