魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
查看: 3146063|回复: 3
打印 上一主题 下一主题

【原创】东方说:列出2阶全部态只需要几十MB! [复制链接]

银魔

【東方】

Rank: 7Rank: 7Rank: 7

积分
3076
帖子
1699
精华
5
UID
13085
性别
WCA ID
2007FUBO01
兴趣爱好
其它

八年元老

跳转到指定楼层
1#
发表于 2009-11-5 17:06:45 |显示全部楼层 |倒序浏览
考虑这些的起因是想列出二阶全部的态
那就必然会用到计算机
用程序计算的话肯定要给二阶的状态编码
包括状态编码和转动编码
这样不但方便计算、储存,而且便于校验重复态和统计数据

二阶没有中心和棱,只有8个角
而且每个角都是唯一的
所以只要捏住一个角,比如BLD,通过RUF三个面的转动就可以达到任何状态
并且不会有遗漏的态
因此,只需要给7个角编码就可以了

又因为是通过固定一个角,转动其他角来实现状态转换的
所以其他7个角中,只要确定6个角的位置和方向,最后一个角肯定也是确定的
于是,在我的这套系统里
只需要给6个角编码就可以唯一表示二阶的某个态了

初步想法是用123456编码位置,然后再编码颜色
后来想到了魔方的配色问题
只需要给颜色编码(白=1,黄=2,3。。。6),按某一顺序(顺时针or逆时针)的颜色表示角块
就可以唯一确定角块的位置了,同时方向也自然通过颜色表示了!

又是因为配色的关系,只需要确定顺时针(或逆时针)的两个颜色
就可以知道第三个颜色了!
举例:某角块顺时针是“黄绿x”那x肯定是红色

1~6的二进制分别是:001、010、011、100、101、110
那么表示二阶一个角就是一个六位的二进制数(两个颜色)
刚才说了表示二阶某个太只需要确定6个角
那就是36Bit,也就是4.5Byte(字节)

就算它5字节吧
那1kb可以表示二阶的200个态
1mb可以表示200000多个态
二阶总共400多万个状态,就算他500万,
也不过是25Mb

(楼下更新:如何用程序列出二阶的全部状态表)

银魔

【東方】

Rank: 7Rank: 7Rank: 7

积分
3076
帖子
1699
精华
5
UID
13085
性别
WCA ID
2007FUBO01
兴趣爱好
其它

八年元老

2#
发表于 2009-11-5 17:07:19 |显示全部楼层
接下来说说如何用计算机程序实现“列举出二阶魔方的全部状态”
状态编码已经说过了
现在介绍一下我的思路,关于“如何实现转动编码”

我的状态转换系统里只有RUF三个面的9种转动:
R、U、F、R'、U'、F'、R2、U2、F2

刚才说了每个状态是用6个角的颜色表示,每个角用2个颜色
但是在计算过程中每个角还是需要用3个颜色表示的,这样便于推导转动后的编码

========================================

【举例】转动R的编码转换:
R的转动实际上就是右边四个角块进行了位置轮换
用我的编码方式来说,就是RUF的三个颜色编码,变成了RUB的颜色编码,并且转换了一下顺序
其他3个角块同样
只需要简单的语句就可以给9种转动进行编码转换定义了

========================================

计算状态转换完成之后,进行重复状态校验
这步很容易,
首先去掉每个角块每个颜色的第三位编码,用转换后状态编码去校对已经存在的状态编码
如有重复,就删除此状态,进入下一步骤
如果没有重复,就进行储存

储存的时候可以给列表分类:
0步态=还原态
1步态=(状态编码。。。。)(状态数量=9)
2步态=(状态编码。。。。)(状态数量=??)
3步态=。。。
。。。。
以此类推

直到进行到了n步态
在计算n+1步态的时候,发现经过9种转动的结果都是重复的态
那么n就是二阶魔方的最远步数
n步态对应的几种状态,就是二阶的最远态
最远态的数量自然也就出来了

列出二阶全部态可以得到以下精确结果:
二阶最远步数是多少?
最远态有几种?分别是什么情况?(直接根据编码就能复制出来)
二阶每个步态有多少种?分别是什么?
当然,二阶总共有多少种状态也被准确的列出来了!

[ 本帖最后由 haohmaru 于 2009-11-5 17:25 编辑 ]

使用道具 举报

银魔

【東方】

Rank: 7Rank: 7Rank: 7

积分
3076
帖子
1699
精华
5
UID
13085
性别
WCA ID
2007FUBO01
兴趣爱好
其它

八年元老

3#
发表于 2009-11-5 17:08:14 |显示全部楼层
给楼下的理论达人们留个地儿。。。。。

使用道具 举报

银魔

【東方】

Rank: 7Rank: 7Rank: 7

积分
3076
帖子
1699
精华
5
UID
13085
性别
WCA ID
2007FUBO01
兴趣爱好
其它

八年元老

4#
发表于 2009-11-6 08:51:08 |显示全部楼层
原帖由 conwood 于 2009-11-6 00:34 发表
不太明白你想做什么,是想用一种格式存储二阶魔方的所有状态,然后通过一个程序来读取这种格式的数据,最终列出所有状态吗?
这样的话,存储可以不需要任何状态,只要写个程序把所有状态列举出来就行了啊。

计算机只认识两个数:0和1

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-5-8 01:11

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部