演算法介紹
首先我們先看一下「基於投票規則的細胞自動機」的定義:
基於投票規則的細胞自動機,實際上是具有如下限定條件的一種細胞自動機:
狀態: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矩陣,並用上述的細胞自動機對該矩陣進行兩次運算,給出最終的矩陣結果。
演算法實現**如下:
/*其中rules_impl()函式的作用是進行細胞自動機運算。****************************************
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
;}
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...