返回列表

YiMatrix · 書院資訊

《易經》裡藏著一段演算法,比圖靈機早了三千多年

「大衍之數五十,其用四十有九」——寫在《周易·繫辭》裡的這句話,翻譯成程式碼就是一段有初始化、迴圈、終止條件的演算法。用數學史、電腦科學、資訊編碼三把尺子重新讀易經裡的「數」:它不是玄學,是中國古人最早寫下、今天還能跑的演算法。

南荒2026年5月30日約 6 分鐘
《易經》裡藏著一段演算法,比圖靈機早了三千多年

"大衍之數五十,其用四十有九。"

這句話寫在《周易·繫辭》裡。

你看不懂沒關係。我直接把它翻譯成今天程式設計師能看懂的程式碼——先取五十;留一個不用;剩下四十九分兩堆;抽一根夾在指間;四個一組數餘數;這樣反覆十八次,推出一個卦。

這不是哲學。

這是一段很早以前寫下、今天還能跑的演算法。

下面我用三把尺子去量它:數學史、電腦科學史、資訊編碼。量完你會發現,寫這段文字的人,幹的事和後來那些把「計算」這件事說清楚的人,是同一件。


一、把它逐句反編譯

先把那段原文一句一句拆開。每句古文,配一句白話,再對到一個程式碼概念。

「大衍之數五十,其用四十有九。」

五十根蓍草(一種草棍,就當成古人手裡的計算工具,類比算盤上的算珠),先留出一根不動,剩下四十九根才進入演算。

——這是初始化:定義一個起始數值。

「分而為二以象兩。」

把四十九根隨機分成兩堆。

——這是把狀態一分為二,整段流程的狀態從這裡開始變化。

「掛一以象三。」

從其中一堆裡抽出一根,夾在手指間。

——一次確定的取數動作。

「揲之以四以象四時。」

把兩堆分別四個一組地數過去。

——以 4 為步長做一次取模運算,看最後餘幾。

「歸奇於扐以象閏。」

數到最後剩下的零頭——一根、兩根、三根或四根——也夾在指間記下來。

——把餘數存進一個臨時變數。

「故再扐而後掛。」

這一整輪做完,叫一變。三變推出一爻,六爻湊成一卦。

——這是迴圈終止條件:迴圈十八次,攢夠六爻,停。

把這五句話並到一起,就是這樣一段東西。看不懂程式碼也沒關係——左邊一列是動作,右邊井號後面那句,就是它對應的古文原句,一行一行對著看就行。

init  蓍草 = 50          # 大衍之數五十
use   蓍草 = 49          # 其用四十有九(留一根不動)
loop 18 次:              # 十八變
    隨機分兩堆           # 分而為二以象兩
    抽一根夾指間         # 掛一以象三
    每四根一組數餘數     # 揲之以四以象四時
    餘數存起來           # 歸奇於扐以象閏
return 六爻成卦          # 故再扐而後掛

你看這段東西有什麼。

它有初始化(五十)。它有狀態變數(手裡那堆草棍的數量,每一輪都在變)。它有迴圈(十八變)。它有終止條件(六爻成卦就停)。

初始化、狀態變數、迴圈、終止條件——這四樣東西,是任何一段程式的骨架。

那段文字,骨架是齊的。


二、這就是圖靈機

我第一次把這段讀完,停下來想了很久。

這不是一個哲學家在表達世界觀。這是一個確切的、可以一步一步執行的過程——你給同樣的起始條件,照著同樣的步驟走,每一步都有明確規則。

1936 年,英國數學家圖靈寫下一篇論文,叫《論可計算數》(On Computable Numbers)。

他在那篇論文裡第一次嚴格刻畫了一件事:什麼樣的過程,是機器可以一步步執行、最後算得出結果的——後來人們把這件事叫「可計算」。他給出的標準很乾淨:一個過程,要有起始狀態,有一條條轉移規則,有終止條件。滿足這三樣,它就是機器算得出來的。

他為此構造的那個抽象模型,後來叫圖靈機

你今天用的每一台電腦、每一部手機,本質上都是圖靈機的工程實現。CPU 在做的事情,剝到最底層,就是「讀當前狀態、按規則跳到下一個狀態、直到停機」。

現在回頭看那五十根草棍。

起始狀態——五十取四十九。轉移規則——分二、掛一、揲四、歸奇。終止條件——六爻成卦。

一樣不少。

大衍之數,是一段用蓍草、用人手就能跑起來的演算法——而它的執行者,就是最早的圖靈機。

時間軸擺出來才更有意思。

1936 年,圖靈用一整篇論文,把「什麼樣的過程算得出來」這件事,第一次說嚴密了。

而寫下《繫辭》這套文字的古人,沒有「演算法」這個詞,沒有這個概念,甚至沒有任何抽象的數學語言來描述自己在幹什麼。

圖靈用了一篇論文,把「演算法」這件事說清楚。古人沒有說清楚它——他們直接把它跑了出來。


三、從太極到 64 卦,一棵完美的二元樹

易經裡還藏著另一個結構,更直接,一眼就能認出來。

《繫辭上傳》第十一章裡有一句:

「易有太極,是生兩儀,兩儀生四象,四象生八卦。」

翻譯成今天的話——

太極是一。兩儀是二。四象是四。八卦是八。

一變二,二變四,四變八,每一層都在乘以二。八卦再兩兩相重,八乘八,得到六十四卦。

把這個數列寫出來:

1 → 2 → 4 → 8 → 16 → 32 → 64。

也就是 2 的零次方,一直到 2 的六次方。六次方,對應一個卦的六爻。

這是一棵嚴格的二元樹。每個節點往下都分成兩支——陰或者陽,0 或者 1,沒有第三種可能。

電腦科學裡那些你聽過的名字——二元搜尋、二元堆積、霍夫曼編碼——全是這棵樹的遠房親戚。你今天刷臉解鎖手機,背後是 0 和 1 在一層層二分。

一、二、四、八、十六、三十二、六十四——這不是數著玩的,這是一棵樹在生長。

從太極到六十四卦:一棵完美的二元樹

再說回那個「五十」。它也不是隨手定的數,背後有一道算術。

《繫辭》第九章說,天數(奇數:一、三、五、七、九)加起來是二十五,地數(偶數:二、四、六、八、十)加起來是三十,合計五十五。

但演算用的是五十——五十五減五。

這一步得老實說:為什麼減的偏偏是五?古人給的理由是把「五行」這五個基數當作底層,留在系統外不參與運算。這一步是一個約定,不是從「五十五」這個數硬推出來的。

而從五十到四十九——五十再減一——這一步是乾淨的:減掉的那個「一」,是那個不動的「太極」,作為起點本身不入算。

五十五、五十、四十九——這幾個數字不是各寫各的,至少後半截是一環扣一環咬合的。它是一道算術題,不是什麼玄機。


四、但易經不是演算法的源頭

講到這裡,我必須停下來,說一件容易被人激動著誤讀的事。

易經不是今天電腦科學的源頭。

萊布尼茲,那個被傳「從八卦發明二進位」的人——他 1679 年就獨立寫出了二進位手稿,那時他根本沒見過任何中國卦圖。他不是從八卦學到二進位的。

他是 1703 年才看到伏羲六十四卦圖,然後驚覺:原來很早以前的中國人,早就寫過這套東西了。先後順序,恰恰反過來。

圖靈也一樣。他不是讀了《繫辭》才想出圖靈機的。他在劍橋,沿著西方數理邏輯那條線,自己走到了「什麼是可計算」這個問題面前。

(說回那個「很早以前」——逐字反編譯的《繫辭》成文其實晚一些,多在戰國到漢初之間寫定;但它記下來的,是更早就在用的那套演算。)

兩個不同的文明,隔著上千年的時代,誰也沒看過誰,各自獨立地,摸到了同一套東西。

這件事,比「易經是源頭」震撼一百倍。

不是誰抄了誰。是只要人開始認真觀察自然、抽象規律,早晚會摸到同一套底層結構。

一個能算的世界,不分東方西方,不分古今。它就在那裡,等不同的人從不同的方向走過來,撞見它。


古人沒有鍵盤,沒有 CPU,沒有「演算法」這兩個字。

他們用五十根草,把一套能跑的運算,寫進了一本幾千年沒斷過的書裡——先把世界計數,再把狀態編碼,再一步步推演,最後還原成眼前的象。

今天我們管這套東西叫演算法。他們只是,認真地看了看這個世界。


繼續閱讀

推薦閱讀

返回列表