haohmaru 发表于 2009-11-5 17:06:45

【原创】东方说:列出2阶全部态只需要几十MB!

考虑这些的起因是想列出二阶全部的态
那就必然会用到计算机
用程序计算的话肯定要给二阶的状态编码
包括状态编码和转动编码
这样不但方便计算、储存,而且便于校验重复态和统计数据

二阶没有中心和棱,只有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

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

haohmaru 发表于 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 编辑 ]

haohmaru 发表于 2009-11-5 17:08:14

给楼下的理论达人们留个地儿。。。。。

ursace 发表于 2009-11-5 17:21:46

第一句就错了

原帖由 haohmaru 于 2009-11-5 17:06 发表 http://bbs.mf8-china.com/images/common/back.gif
考虑这些的起因是想列出二阶全部的态
那就必然会用到计算机

其实手写也可以;P ;P

kexin_xiao 发表于 2009-11-5 17:51:44

占楼仔细学习一下,理论问题以学习为主:handshake

noski 发表于 2009-11-5 18:43:05

原帖由 ursace 于 2009-11-5 17:21 发表 http://bbs.mf8-china.com/images/common/back.gif


其实手写也可以;P ;P
这句话来头可就大了。。

doris5200 发表于 2009-11-5 18:49:57

占个前排好学习达人们的理论

K_daSh 发表于 2009-11-5 19:06:50

这有点深奥,数学问题呀

william_khs 发表于 2009-11-5 19:25:45

考慮二階魔方共有3674160個狀態,
假如要完整儲存整個魔方狀態,
1個狀態就需要 8個byte
而二階魔方的所有狀態共佔用(3 674 160 x 8byte)=29 393 280byte = 28.03mb(取至小數點後兩個位)

當然,要簡化它的話也不是沒有方法,
簡單的說就是利用魔方的狀態有限制,就像二階不能單單一隻角翻色

raka 发表于 2009-11-5 19:46:05

努力学习,需要时间领会
页: [1] 2 3 4 5 6 7
查看完整版本: 【原创】东方说:列出2阶全部态只需要几十MB!