YiMatrix · 书院资讯
《易经》里藏着一段算法,比图灵机早了三千年
「大衍之数五十,其用四十有九」——写在《周易·系辞》里的这句话,翻译成代码就是一段有初始化、循环、终止条件的算法。用数学史、计算机科学、信息编码三把尺子重新读易经里的'数':它不是玄学,是中国古人最早写下、今天还能跑的算法。

"大衍之数五十,其用四十有九。"
这句话写在《周易·系辞》里。
你看不懂没关系。我直接把它翻译成今天程序员能看懂的代码——先取五十;留一个不用;剩下四十九分两堆;抽一根夹在指间;四个一组数余数;这样反复十八次,推出一个卦。
这不是哲学。
这是一段很早以前写下的、今天还能跑的算法。
下面我用三把尺子去量它:数学史、计算机科学史、信息编码。量完你会发现,写这段文字的人,干的事和后来那些把"计算"这件事说清楚的人,是同一件。
一、把它逐句反编译
先把那段原文一句一句拆开。每句古文,配一句白话,再对到一个代码概念。
「大衍之数五十,其用四十有九。」
五十根蓍草(一种草棍,就当成古人手里的计算工具,类比算盘上的算珠),先留出一根不动,剩下四十九根才进入演算。
——这是初始化:定义一个起始数值。
「分而为二以象两。」
把四十九根随机分成两堆。
——这是把状态一分为二,整段流程的状态从这里开始变化。
「挂一以象三。」
从其中一堆里抽出一根,夹在手指间。
——一次确定的取数动作。
「揲之以四以象四时。」
把两堆分别四个一组地数过去。
——以 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,没有"算法"这两个字。
他们用五十根草,把一套能跑的运算,写进了一本几千年没断过的书里——先把世界计数,再把状态编码,再一步步推演,最后还原成眼前的象。
今天我们管这套东西叫算法。他们只是,认真地看了看这个世界。