|
元胞自动机(Cellular Automata,以下简称CA)最早由Von Neuman 等人提出, 虽然元胞自动机的结构简单,但是由大量元胞的相互作用而产生的总体行为却非常复杂。因此与传统的计算机数值计算和模拟方法比较,CA 能更好地模拟晶格生长、雪花形成、化学过程和流体形成等难以解析表达的复杂现象.近年来,许多学者对CA 的行为进行研究并应用到数学、物理、生物和计算机科学等领域。元胞自动机在数学方面的研究,主要集中在研究它们的行为,即它们在演化过程中的性态.
如今许多线性的问题得到了解决。
函数f∶{0,1}3→{0,1}称为一个三重局部变换规则,如果f 可以表现为以下形式:
111 110 101 100 011 010 001 000
r7 r6
r5 r4
r3 r2
r1 r0
其中f 的规则数N定义为:
N=2`7*r7+2`6*r6+…+2`0*r0
边界值按不变计算,则Python实现代码如下:
#coding=utf8
#N = 1471
#n = 4
#str_cell = "00011110101010"
N = int (raw_input(u"请输入N值:"))
n = int (raw_input(u"请输入计算代数:"))
str_cell = raw_input(u"请输入原始序列:")
if ( N>=128 ):
str_N = bin(N)
str_N = str_N[2:]
elif (N > 0):
str_N = bin(N)
num = len(str_N[2:])
str0 = "00000000"
str_N =str0[:8-num] + str_N[2:]
print u"映射序列"+str_N
print u"第 0 代:" + str_cell
li_num = []
num = 0
for i in range (0,8):
if ( num >= 4):
str_num = bin(num)
str_num = str_num[2:]
li_num.append(str_num)
elif (num >= 0):
str_num = bin(num)
num0 = len(str_num[2:])
str0 = "000"
str_num =str0[:3-num0] + str_num[2:]
li_num.append(str_num)
num = num +1
dict_N = dict([(li_num[t],str_N[t])for t in range (0,8)])
for k in range (1,n+1):
str_cell_new = str_cell[0]
for i in range (0,len(str_cell)-2):
if i >=0 & i<(len(str_cell)-2):
cmp_cell = str_cell[i:i+3]
str_cell_new = str_cell_new + dict_N.get(str_cell[i:i+3])
str_cell_new = str_cell_new + str_cell[len(str_cell)-1]
str_cell = str_cell_new
print u"第",'%2d'%k,u"代:"+str_cell
|