舊書有云:發鳩之山,其上多柘木。有鳥焉,其狀如烏,文首、白喙、赤足,名曰精衛,其鳴自詨。html
一日,精衛遊於碼海,溺而不返,後常銜西山之木石,以堙於海。有詩爲證:git
萬事有不平,爾何空自苦;github
長將一寸身,銜木到終古?編程
我願平碼海,身沉心不改;後端
碼海無平期,我心無絕時。數組
嗚呼!君不見,西山銜木衆鳥多,鵲來燕去自成窠!學習
(前情提要:主角元乘坐返回艙降落到了碼海上,隨後遇到了個鳥人...)測試
「咳咳,遠道的客人,我名精衛 XIV,乃是先祖精衛鳥的第十四代後裔...」鳥人做自我介紹ui
「...你是誰,從哪裏來又要到哪裏去?」鳥人頓了頓接着問道spa
元不由陷入了沉思,哲學問題老是難以快速給出答案。
精衛 XIV 打量了會兒元,見其仍沉默不語,更是堅決了本身的想法,又道
「少年,我看你頸椎清奇,必是萬中無一的編程奇才,今日與你有緣,這裏有一本《碼海之巔》,就贈予你了。」
「唔,這講的是什麼?」元好奇道。
「精衛變成了個鳥人,但他沒有放棄這個世界的愛,他始終微笑着,終於被一名仁慈的老闆發覺,老闆把他招聘來作了後端開發,十年之後,精衛終於成爲了一名偉大的軟件測試師。因此,咱們不要放棄但願,天使永遠住在你微笑的嘴角。」
...
注:碼海,充斥着代碼的海洋
注:Bug,碼海中廣泛存在的一種生物
Hawaii 讀者評論:
「我最近讀到一本好書《碼海之巔 》,文中提到了如何用元胞自動機模型更好地理解碼海中 Bug 的繁衍模式。」--從事編程 20 餘年的 LuisIbara
「不少編程書讀起來味同嚼蠟,大多數的編程課程一樣枯燥無聊。本書給出了我目前所知各類編程概念最深刻淺出的雞湯解釋。」--不肯意透露姓名的 Alice
「我是一名文學愛好者,最喜歡的就是做者在書中的回憶錄,在我看來這實際是一本講述軟件測試員與 Bug 之間愛恨情仇的書。」--自稱文學愛好者的 Youkili
...
--節選自《碼海之巔·抵得上 20 年工資的 3 句評論》
複雜系統的性質
個體之間存在小範圍的聯繫
個體的動做是並行的
系統在總體上會呈現出自發現象
什麼是元胞自動機?
它能構建隨時間推移發生狀態轉移的系統
細胞存在於一維或多維網格中
每一個細胞都有一個或多個狀態
每一個細胞都有鄰居(即鄰近的細胞)
元胞自動機分類
平穩型:自任何初始狀態開始,通過必定時間運行後,元胞空間趨於一個空間平穩的構形,這裏空間平穩即指每個元胞處於固定狀態。不隨時間變化而變化。
週期型:通過必定時間運行後,元胞空間趨於一系列簡單的固定結構(Stable Patterns)或週期結構(Perlodical Patterns)。因爲這些結構可看做是一種濾波器(Filter),故可應用到圖像處理的研究中。
混沌型:自任何初始狀態開始,通過必定時間運行後,元胞自動機表現出混沌的非週期行爲,所生成的結構的統計特徵再也不變止,一般表現爲分形分維特徵。
複雜型:出現複雜的局部結構,或者說是局部的混沌,其中有些會不斷地傳播。
圖1-1 二維元胞自動機
初九日,驚蟄。
我經常眺望碼海,覺得會等到一我的。不少年之後,我去了碼海,我才知道是我錯了。
不少年之前,我有個綽號叫作瘋子,任何人均可以變得瘋狂,只要你嘗試過什麼叫作 Debug 時的無助。我不會介意其餘人怎麼看我,我只不過不想看到別人比我更無助。
又是一個下雨天,我帶了把雨傘。但是每次我一我的撐傘走在雨中的時候,我都會難過。
之前我是不打傘的,由於我感受本身是一隻無腳鳥,只能不停的飛,飛的累了就在風裏休息。這樣也挺好的,不知道疲倦。
直到有一天,一個大眼睛的女人和我一塊兒在樹下躲雨。
咱們最接近的時候,我跟她之間的距離只有 0.01 公分,2 個小時以後,我愛上了這個女人。
我相信除了寂寞,緣分是男人和女人之間相愛的另外一種起因。寂寞是每時每刻,緣分是不知不覺。
--節選自《碼海之巔·時間是座彼岸橋》
四邊網格-死亡
競爭:細胞周圍存在 4 個及以上的鄰居時,細胞死亡
孤獨:細胞周圍「活着」的鄰居等於或小於 1 時,細胞死亡
四邊網格-新生
處於死亡狀態的細胞,當它周圍恰好有三個活着的鄰居,它也會變爲活着的狀態
四邊網格-靜止
保持活着:若是細胞是「活着」的,並且周圍有 2 個或 3 個鄰居時,它將繼續活着
保持死亡:若是細胞是「死亡」的,並且鄰居數目不等於3時,它將保持死亡狀態
圖2-1 保持靜止的組合
圖2-2 交替出現的組合
驚蟄,忌驕暴動怒。每一年的這個時候,我都會駕着船,去東方的沙洲,見一我的。我知道,她見不到我,會悄悄咬本身的頭髮。
「咱們在哪裏見過嗎?」她的船艙裏,總有幾個奇奇怪怪的夥計。
「你忘了嗎?忘了最好--」那個圓臉蛋的夥計擦了擦桌子,臉色變了變。
「咱們發過誓要殺了你的,不過很不巧,咱們如今也不算是敵人。」一個瘦高個,山羊鬍子的人答道。我以爲他們都很奇怪,明明是店裏的夥計,總說本身是敵人。
她這裏有一種泡了桃花的酒,她說酒叫「醉生夢死」,喝了以後,能夠叫你忘掉之前作過的任何事情。
我很奇怪,爲何會有這樣的酒。她說,人最大的煩惱,就是記性太好,若是什麼均可以忘了,之後的每一天,都會是新的開始。那你說多開心。
她陪着我一塊兒喝,喝了以後還會唱曲調很怪的歌曲。
如今,我只記得兩句,醜 Bug 怪~呀咦呀啊啊~啊啊啊,可否別把燈打開。
--節選自《碼海之巔·人生如夢》
擴展的屬性
位置:網格中的位置
顏色:實際顯示的 ARGB 顏色
大小:單個網格佔據的像素大小
形狀:方塊、圓形或其餘形狀
生命:記錄迭代次數
其餘:其餘自定義的屬性
擴展屬性的特色
多狀態:前述中細胞只有「生」與「死」兩種狀態,如今它的狀態變得極其豐富,好比 RGB 顏色可表示多達 1678 萬種色彩。
歷史性:在面向對象的生命遊戲程序中,若是你用一個數組存放細胞的狀態歷史,會有怎樣的特性?事實上這種特性經常使用於開發「複雜自適應系統」,它能從歷史學習中不斷適配和改變規則。
圖3-1 保留歷史的 CA 圖案
立春事後,一場清剿碼海 Bug 的戰役打響了,我擔任測試資源調度員,也就是運糧官。不過不要緊,戰場上總能聽到風聲。
「精衛小賊,咱們來取你的命。」我看到山羊鬍子和圓臉胖子發出白光,以爲很好笑。自動化測試大軍勢如破竹,已經攻到了近海,還有這種不怕死的 Bug 嗎?
他們說他們叫沙洲八怪。可是好奇怪,我殺了一隻又一隻,爲什麼仍是少一隻。
一個小時之後,碼海上有一股波浪線直衝雲霄。這天是驚蟄,萬物復甦,是新的開始。如今,卻有一個 Bug 來找死。
個人編譯器再也不提示錯誤了。甲板前方有一個扶着兵器的女人,一句話也不說,向着我走來。
我認識時就知道她是 Bug,她騙的了編譯器,卻騙不了我。有時候最瞭解你的人不是你的朋友,而是你的敵人。
「回去很差嗎?在你的沙洲泡酒,快活一世。我攔不住他們,只能攔下你了。」
「可我不圖一世,只圖一時。我是個 RuntimeException。」
「哎--」她拋出的空指針暗器來勢洶洶,卻沒有多少殺意。我看到她的嘴角流血,本身的心也開始莫名的痛了一下。
我知道全部的悲歡都已化爲灰燼,任世間哪一條路,她都不能與我同行。
--節選自《碼海之巔·世界上最遙遠的距離》
二維CA空間劃分
三角網格:較少的鄰居數目,這在某些時候頗有用
四邊網格:適合在計算機環境下進行可視化輸出
六邊網格:天然真實,能較好地模擬各向同性的現象
六邊網格的實現
六邊網格依然能夠用二維數組存儲
奇數層相對偶數層偏移必定的距離
奇數層、偶數層對應不一樣的鄰居關係
圖4-1 六邊網格鄰居關係
圖4-2 六邊網格生命遊戲
當我站在沙洲前,以爲很是的難過,我總以爲,應該是兩我的站在這裏。
不少年後,總有些代碼,你想寫殊不知從何寫起,總有些人,你想見卻又無處找尋,瑣碎生活與時間倦怠的逐步侵蝕,感受日益趨於遲鈍,心也由得毫不在意。
只是記憶不禁得你,或閒庭信步的觸景傷情,或夢醒時分的黯自惆悵,或只是某個漫不經心的調侃後,那昔日的情景乍然浮現心間,遙遠得恍若海市蜃樓。
其實「醉生夢死」只不過是她跟我開的一個玩笑,你越想知道本身是否是忘記的時候,你反而記得越清楚。我曾經聽人說過,當你不可以再擁有,你惟一能夠作的,就是令本身不要忘記。
--節選自《碼海之巔·總在寒夜裏想着一我的》
CA可用來研究不少通常現象
通訊(Communication)
計算(Compulation)
構造(Construction)
生長(Grain Growth)
複製(Reproduction)
競爭(Competition)
進化(Evolution)
計算機科學領域的應用
並行計算:CA 能夠被看做是並行計算機,從而用於並行計算的研究
圖像處理:CA 規則能夠用於模擬墨水在紙上的浸散效果及圖像的水紋效果
圖5-1 CA 模擬水墨浸散(50% 保留)
圖5-2 CA 模擬水墨浸散(100% 保留)
「暴風雨就要來了!我得走了。」
精衛 XIV 居高臨下對着元說到。
「碼海中充滿了危險,你也最好離開吧,要不要我載你一程?」
元一聲不響,點了點頭。只是,他從另外一個世界來,又能去哪裏呢?
...
在線演示:CA - GameOfLife
未完待續。瞭解更多請瀏覽目錄導航。