魔方复原算法分析
-------------------------------------------------
1 穷举复原法
1.1 初始设定
起始图案:特定的任意非复原图案,称为A
目标图案:复原图案,称为B
1.2 操作目标
找出A到B的最短复原步数
1.3 复原方法
* 假定A能在N步内复原
* 偿试N步在另一个B图案魔方六个面的不同分配方式
* 如果N步的一个分配方式再现了A,则此分配方式的逆序就是A图的复原步骤,再用N-1步递归调用第二步,直至找到最小分配方式
* 如果N步的所有分配方式不能再现B,则用N+1步递归调用第二步,直至找到再现B的分配方式
* 这也是当前唯一可行的最优算法
1.4 算法优点
算法结构简单,保证找出最短步数
1.5 算法缺点
耗时长,技术含量最低
对四阶以上高阶魔方来说,无疑是挑战宇宙年龄
2 顺序复原法
2.1 初始设定
起始图案:特定的任意非复原图案,称为A
目标图案:复原图案,称为B
2.2 操作目标
找出A到B的转换步骤
2.3 复原方法
将魔方每层块进行排序,逐层逐块对魔方块进行块归位,这种算法要求编排每个块可能状态对应的公式序列,依据块的当前状态选择合适的公式实施块复位,最后将所有块复位的公式按顺拼接在一起就是一个特定图案的复原步骤
2.4 算法优点
* 算法构造容易,组织结构非常清淅
* 特适合初学编程新手及教学之用,本人十六年前做的第一个成功三阶复算法就是这种方法
* 公式数据可手工采集组织,可随时更新
2.5 算法缺点
* 公式数据采集量大,校对工作量大,需要一定的检索公式的技巧
* 一个公式对应块的一个状态,对三阶而言,复位第一个边角块需要求23组对应工式,复位第二个边角块需要20组对应个公式,复位第七个边角块须要2组公式,中棱块情况大至相同.
* 对四阶以上高阶魔方最上层边棱块错误(有一个边的所有边棱块二二互换了位置)的处理,要对最上层以下的所有n-1个内层实施90度转动,然后再对这n-1个内层逐块重复实施非扰动归位(即归位方法不再适成新的边棱块二二互换),最后才对最上层实施逐块归位
* 显然,这种方法到最上层才会发现边棱块错误,处理完边棱块错误后,又重复处理n-1个内层块的复位问题,且处理量不小.
* 对高阶魔方,手工编制公式数据不现实
* 极不适合步法优化.
2.6 附带特性
* 用块对应的公式组进行组合,可算出魔方的所有组合状态
* 在复原过程中即可判断出魔方的组装错误及错误类型
3 定律复原法
3.1 初始设定
起始图案:特定的任意非复原图案,称为A
目标图案:复原图案,称为B
3.2 操作目标
找出A到B的实现步骤
3.3 复原方法
* 从簇间关系的角度,找出A图案当前存在的非零态扰动关系并将其消解为零态扰动关系
* 仅用簇内变换规则对各块实施复位
3.4 算法优点
* 概念清淅
* 没有混沌的感觉,没有重复
* 构造算法容易
* 特别适合电脑处理
* 公式极少
* 特别适合高阶魔方还原
3.5 算法缺点
1. 对N阶定律要有非常透彻的理解
2. 特别不适合手工玩家复原,玩家应有鹰一样的视觉,内存条记忆的准确性
3. 可优化性差
4 经验复原法
4.1 初始设定
起始图案:特定的任意非复原图案,称为A
目标图案:复原图案,称为B
4.2 操作目标
找出A到B的复原步数
4.3 复原方法
通过对魔方当前状态的判断,应用已熟记的大量经验公式,对魔方实施复原
4.4 算法优点
速度快,平均优化效果相对较好
是一种折中性能最好的方法
4.5 算法缺点
* 算法设计不易,结构复杂,组织性差
* 手工操作,玩家需要记住大量经验公式,对玩家的记性与反应有极高的要求
* 严重依赖个人经验
* 不适合四阶以上高阶魔方求解处理
-------------------------------------------------------
忍冬:完成于西藏拉萨,布达拉宫脚下
2005年月4月14日
[此贴子已经被作者于2006-11-8 6:44:41编辑过]
可笑啊!这与“N阶定律”有何关系?
有必要全部文章都打上“N阶定律”这记号吗?不如直接打上“忍冬”的记号,成“基于忍冬的魔方复原算法分析”。
然后就可对别人说“不管什么人玩魔方都逃不出忍大师的手掌心!”你真的太高明了,佩服佩服!
烟兄且慢笑他。估计您和我一样不会编程什么的,至少我是不会。
我这里说说外行话,说错的话,魔友们指出就是。
我想冬兄此文是编程的总的指导思想吧?我有一帖谈如何“克隆”
一个魔方图案,其中A、B态都是打乱态,自认为所用公式既最少
又是仅用一套,这特点用在编程时,需要调用的子程序就那么几个。
我的方法不适于快速法,因为有得有失--公式少了,步子就多了,
但对电脑来说,步子稍多无所谓吧?
冬兄本帖说:
“4.3 复原方法
通过对魔方当前状态的判断,应用已熟记的大量经验公式,对魔方实施复原”
若我的上述说法能用于“4 经验复原法”的编程,自认为不必
“应用已熟记的大量经验公式”去编程了。我说得对否?
可笑啊!这与“N阶定律”有何关系?
有必要全部文章都打上“N阶定律”这记号吗?不如直接打上“忍冬”的记号,成“基于忍冬的魔方复原算法分析”。
然后就可对别人说“不管什么人玩魔方都逃不出忍大师的手掌心!”你真的太高明了,佩服佩服!
这是忍者基于自已原创理论的观点,当然没有必要写进大烟头的独角坐标复原法,这只是一种视角而已,大烟头当然可以发表"基于大烟头"的复原算法分析,谁会介意?
任何正方体色子魔方的状态本来就逃不出忍大师N阶定律的掌心,你有反证吗?肯定没有,永远也不可能有.
但。。。。。呵呵。。。。。。找不到出气的反证,痛心啊,玩笑.
任何正方体色子魔方的状态本来就逃不出忍大师N阶定律的掌心,你有反证吗?肯定没有,永远也不可能有.
先不论这鸡与蛋的问题,n阶魔方中层可转,你的定律行吗?吹牛。。。
N阶定律还是摆脱不了魔方实际结构的束缚. 以立方体色子阵来定义结构只是一个幌子而已.
对魔方内部嵌套的情况就一笔带过,对于中间层的转动问题不能囊括在内.
N阶定律还是摆脱不了魔方实际结构的束缚. 以立方体色子阵来定义结构只是一个幌子而已.
对魔方内部嵌套的情况就一笔带过,对于中间层的转动问题不能囊括在内.
N阶定律只讨论正方体色子阵表层色子所有可见面的状态
1.什么样的魔方定律不受魔方结构制约?
2.内部嵌套难到不受N阶定律制约?
3.中层转动难到还须要讨论?爱因斯坦可是相对论的高手,他是绝对不会讨论中层转动问题的,这样吧,就请小邱搞一个中层扰动方程给大家看看如何?
[此贴子已经被作者于2005-12-12 0:14:22编辑过]
先不论这鸡与蛋的问题,n阶魔方中层可转,你的定律行吗?吹牛。。。
N阶定律本来就是公式无关地讨论状态变换规则,所以对任何层的转动都不“感冒”,此外,只要有与中层转动等价的描述,为什么一定要用中层转动?我倒是很想看看中层扰动方程是什么模样
另外,我更想看看,如何用其它簇表达扰动的方法来表达中心块簇的扰动,因为有人认为所有簇都是平等地享用着通用三交换。
[此贴子已经被作者于2005-12-12 0:29:05编辑过]
大烟头正好说反了,相对N阶坐标参照系,偶阶层转动可以转出魔方整体转动的效果,而奇阶不能(因为含中棱块的内层不能转动),N阶参照坐标系中没有整体转动的说法。大烟头要注意区别:
1。所有转层只能在N阶坐标参照系允许的方式转动
2。魔方状态是块与块之间的相对位置与色向的概念
从N阶坐标系的角度,偶阶不同的整体转动状态就是不同状态,但是从纯魔方状态的角度却没有区别,这句可能会让一高手找到批N的话柄,当然真正的高手是不会这样的,哈哈哈。。。
你们几个还没有跳出圈子啊! 其实魔方状态及性质是与坐标系无关的.
何必一定要拿坐标系来做参考啊?难道就没有别的东西做参考?
我现在的参考物就是一个复原态的魔方.
分析过程就是拿后来变化的状态与它做比较.
状态变不变就两个比一比就明了了.
拿某个状态(最好是复原态)的魔方做参考还比较好的,我认为.
因为像立方体(长方体)的魔方建立坐标系容易,但像五魔方,金字塔魔方等等魔方建坐标系就困难多了,而且每种魔方可能就要建一个新的坐标系.
直接拿一个复原态的魔方做参考岂不更自然,更容易,更容易比较.
拿某个状态(最好是复原态)的魔方做参考还比较好的,我认为.
因为像立方体(长方体)的魔方建立坐标系容易,但像五魔方,金字塔魔方等等魔方建坐标系就困难多了,而且每种魔方可能就要建一个新的坐标系.
直接拿一个复原态的魔方做参考岂不更自然,更容易,更容易比较.
一个打乱的魔方以一个复原态的魔方做参照比较,要如何比较啊?
就拿忍大师来讲吧,奇阶魔方他会以两魔方中心块相对位置来作参照比较。偶阶的咋办啊?
N阶魔方还是以其中一个角块为参照点为好啊,不管奇阶魔方还是偶阶魔方它们都有角块的。
[em01]
就这样比较,看到位置与色向与复原态一致的就是复原的,否则就不是.
比如图中明显有一个角块就是复原的,而中心块明显就没有复原.
这里的复原就是严格的位置与色向的复原,是真正严格的复原.
而一般的复原仅是相对的复原.不是太严格.
大家初步算出来的状态数都是严格的全状态数.
除以24就得到相对状态数,也就是大家常说的状态数.
看了17楼爱因斯坦兄的说法,启发我有个想法。任一乱态魔方的
任一块都可作为复原基准,好像晶体生长的晶种似的。这种玩法
颇有趣,也不难。现有的许多复原法不一定用同一种基准,多数
以六个中心块为基准,直观、方便。从道理上往开里想,任何合法
状态都是某一态(比如六面复原态)这一转那一转如此这般得来的;
设想我不在魔方外看它如此这般折腾,我缩小到躲在“任一舱”--
任一魔方块--内部,只见舱外群魔乱舞,完了,我让它们逆过来舞,
或者按别的优化的路线舞,不就可以复原的吗?在舱内看,完全可以
把本舱当作不动的“基准”的嘛。
[此贴子已经被作者于2005-12-12 17:40:25编辑过]
原帖由 <i>乌木</i> 于 2005-12-12 17:39 发表 <a href="http://bbs.mf8-china.com/redirect.php?goto=findpost&pid=16319&ptid=790" target="_blank"><img src="http://bbs.mf8-china.com/images/common/back.gif" alt="" border="0"></a>
看了17楼爱因斯坦兄的说法,启发我有个想法。任一乱态魔方的
任一块都可作为复原基准,好像晶体生长的晶种似的。这种玩法
颇有趣,也不难。现有的许多复原法不一定用同一种基准,多数
以六个中心块为基准,直观、 ...
欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/) | Powered by Discuz! X2 |