C語言實現基於投票規則的細胞自動機

2022-02-11 12:36:20 字數 1985 閱讀 8450

演算法介紹

首先我們先看一下「基於投票規則的細胞自動機」的定義:

基於投票規則的細胞自動機,實際上是具有如下限定條件的一種細胞自動機:

狀態:0或1;

鄰居:中心的3*3鄰居;

規則:計數p表示中心的3*3鄰居中1的個數(包括中心本身),if p<5,中心設定為0.否則設定為1 。

混沌隨機序列:

一般我們採用混合光學雙穩模型迭代方程實現混沌隨機序列的產生:

題目要求:

現在給定係數a為4,xb

為2.5,要求生成乙個長度為16的混沌序列。並且用一下方法將該序列轉換為0 1序列:xi > 2.5 則賦值為1, 否則賦值為 0 。然後把這個序列排成4 * 4的0 1矩陣,並用上述的細胞自動機對該矩陣進行兩次運算,給出最終的矩陣結果。

演算法實現**如下:

/*

****************************************

author: nero

data:2013/12/22

deifning coefficient a as 4, xb as 2.5;

****************************************

*/#include

#include

using

namespace

std;

const

int a = 4

;const

float xb = 2.5

;void rules_impl(float p,float dmatrix[4][4

]);void cellular_automata(float

dinit)

//print sequence

for (i = 0; i < 16; i++)

printf(

"\n\n");

for (i = 0; i < 16; i++)

for (i = 0; i < 4; i++)

}//print matrix

printf("

the original matrix is \n");

for (i = 0; i < 4; i++)

printf("\n

");}

printf("\n

");//calculate the centers, twice

for (i = 0; i < 2; i++)

printf(

"the final matrix is \n");

for (i = 0; i < 4; i++)

printf("\n

");}

printf("\n

");}void

inter()

void rules_impl(float p,float dmatrix[4][4

]) }

//matrix[2][1]

for (i = 1; i<4;i++)

}//matrix[1][2]

for (i = 0; i<3;i++)

}//matrix[2][2]

for (i = 1; i<4;i++)

}dmatrix[

1][1] = p[0]<5?0:1

; dmatrix[

2][1] = p[1]<5?0:1

; dmatrix[

1][2] = p[2]<5?0:1

; dmatrix[

2][2] = p[3]<5?0:1

;}

其中rules_impl()函式的作用是進行細胞自動機運算。

cellular_automata()函式為主要功能實現函式,包括隨機序列的產生,矩陣的產生以及對rules_impl()函式的呼叫。

C語言實現棧 基於陣列

棧是一種操作受限的資料結構,只允許從一段操作,而且先進後出 filo first in last out 這裡將棧的操作封裝在c語言的標頭檔案裡 實現棧的 如下 include define maxsize 10 typedef int datatype sequence stack 實現順序棧,使...

基於C語言實現快速排序

快速排序的基本思想是 1 先從陣列中取出乙個數作為基準數。2 將小於或等於它的數全放到它的左邊,大於它的數全放到它的右邊。3 再對左右區間重複第 2 步,直到各區間只有乙個數。更易於理解的排序邏輯是 挖坑 遞迴 請移步此微軟大佬的文章 白話經典演算法系列之六 快速排序 快速搞定 時間複雜度 o n2...

基於c語言實現螺旋矩陣

首先我們要清楚螺旋矩陣的內涵,即所謂 螺旋方陣 是指對任意給定的n,將1到n n的數字從左上角第1個格仔開始,按順時針螺旋方向順序填入n n的方陣裡。最基本的就是定義乙個二維陣列,對其進行向右 向下 向左 向上的依次迴圈。1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 1...