沉寂700年,13世纪枚举算法重获关注
速览
一个诞生于13世纪的枚举算法,在沉寂700年后被研究人员重新发掘。该算法在组合数学领域具有先驱意义,可能早于西方类似发现数百年。这次重新发现不仅修正了算法史,也为现代计算和人工智能中的搜索与枚举问题提供了历史视角。
AI 深度解读
背景
本文是一系列文章的第一篇,探讨了我在研究卡巴拉学者 Abraham Aboulafia(1240 – 1291年后)著作中 Tserouf 时的一项发现。Tserouf 是卡巴拉中排列字母的艺术——用纯数学术语来说,就是枚举一个 n 字母单词的所有排列。
在《Or ha-Sekhel》(“智慧之光”)中,Aboulafia 规定了一种系统方法,用于枚举 n 字母单词所有可能的排列方式。该方法虽然构思于精神实践的框架内,却承载着异常严谨的数学结构。
核心内容
对于三字母单词,Aboulafia 明确给出了 Tserouf——即全部六种排列的次序: 单词按首字母分为三组:
- 首先,以 a 开头的单词;
- 然后,以 b 开头的单词;
- 最后,以 c 开头的单词。
三字母的两条规则
Aboulafia 明确提到了三字母 Tserouf 的两条规则:
规则1——镜像。 整个序列必须以起始序列的逆序结束。Aboulafia 直言:“最后一个话语是第一个的逆序。”第一个单词是 abc;最后一个必须是 cba,即首尾完全颠倒。
规则2——固定首位。 在放弃首位字母之前,尽可能长时间地保留它。你先穷尽所有以 a 开头的单词,然后所有以 b 开头的单词,最后是以 c 开头的单词。首位在必须改变之前保持不变。
这两条规则几乎足以强制确定整个三字母的顺序。“固定首位”规则将三组按 a、b、c 的顺序排列。在每组内部,只有最后两个字母可以交换;而镜像规则固定了第一组(必须以 abc 开始)和最后一组(必须以 cba 结束)。
但有一个情况困扰了我:为什么 bca 排在 bac 之前,而不是相反?两条规则似乎都没有强制这一点。
这一个微小的问题是整个发现的引擎。有时一个简单的问题结果却弥足珍贵。我花了几个月都无法放下它——而事实证明,正是对这个问题的追寻,引出了本系列的一切。
从 n 到 n+1:转动轮子
如何从三字母的顺序推导出四字母的顺序?Aboulafia 给出了另一条规则,也是整个方法的核心:
回到开头,将第一个字母发送到单词末尾。
也就是说,将单词循环移位一位。abcd 变成 bcda,变成 cdab,变成 dabc——四次旋转,四个首位,四个组。在每个组内,对剩余字母应用同样的方法。
四行中的每一行都由单词的一个循环移位打头,而每一行都是对剩余字母应用三字母顺序的完整副本。
统一规则
以下揭示了 Aboulafia 的天才之处。整个流程——无论对于三个字母、四个字母、十个字母还是任意数量的字母——都由一个操作掌控,该操作在每个尺度上反复应用:将第一个字母发送到末尾。
正是这个单一的旋转操作,在顶层让你从一个组进入下一个组。也是同样的旋转操作,应用于剩余字母,在下一级构建每个组。再下一级也是如此。一个单一的动作贯穿了整个排列的嵌套层级。该方法不会因为单词变长而变得更复杂;它只是对越来越短的子单词重复应用同样的移动。
这正是计算机科学家所说的递归算法——而且是一种极其简洁的算法。该规则易于陈述,却能生成全部 n! 种排列,每种一次,且最终回到起点。
Aboulafia 在本章第一行就命名了整个方法: “这条规则容易理解;虽然它没有我们可以把握的终点,但它必然有一个终点。” 三个分句,三个时刻:规则是简单的;它所展开的东西超出了任何我们能记住的范围;然而这个行走是有限的——它闭合,它必然有一个终点。
唯一做过这件事的人
当时我不知道这件事有多么重要。
直到17世纪,除了 Aboulafia,没有其他人给出过任何排列的次序。其他所有传统——其他所有卡巴拉学者——只是将它们列在表格中。那个介于 bca 和 bac 之间的小小选择,是世界上唯一系统方法看得见的尖端。
有一个惊人的历史对照。唯一独立发明基于规则的遍历所有排列方法的其他人,是17世纪的英国敲钟人。
敲钟人在钟楼里找到了他们的顺序;Aboulafia 在精神实践中找到了他的。不同的世界,相同的目的:一种遍历排列全部空间、不遗漏不重复的方法。而 Aboulafia 在13世纪就做到了——比敲钟人早了三百年,比计算机科学早七百年。
未来走向
因此,Aboulafia 给出了一个真正的用于排列的递归算法。仅此一点就足以成为一个不错的历史注脚。但还有更多。
他的确切次序恰好与数学家 Shimon Zaks 在1984年发表的一个算法相吻合——后者通过完全不同的路径得出,并建立在年轻时的 Bill Gates 在其唯一科学论文中研究过的一个操作之上。那是下一篇文章的内容。
关键要点
- Aboulafia 在13世纪提出了一种系统枚举 n 字母单词所有排列的方法,称为 Tserouf。
- 对于三字母情况,他明确给出了两条规则:镜像规则(序列首尾互为逆序)和固定首位规则(尽可能保留首位字母)。
- 从三字母扩展到四字母时,核心规则是“将第一个字母发送到末尾”——即循环移位一位,然后对剩余字母递归应用同样方法。
- 该算法本质上是递归算法:在所有尺度上重复同一旋转操作,自动生成所有排列且不重复。
- 直到17世纪,除 Aboulafia 外没有人给出过明确的排列次序;唯一独立发明类似方法的是英国敲钟人,但晚了300年。
- Aboulafia 的次序与1984年 Shimon Zaks 的算法一致,且与 Bill Gates 早年研究过的操作相关。
意义与影响
Aboulafia 的算法是人类历史上已知最早的排列枚举系统方法,比西方数学界和计算机科学的类似成果早了数百年。它不仅具有数学上的严谨性,还体现了递归思想——这一概念直到20世纪计算机科学兴起后才被广泛认知和应用。
该发现将卡巴拉神秘主义传统与严谨的数学结构联系起来,展示了前现代思想中蕴含的计算思维。Aboulafia 的算法与17世纪英国敲钟人的独立发明、20世纪 Zaks 的数学研究以及 Bill Gates 的学术工作形成了跨越时空的呼应,证明了人类在探索排列组合问题上的共同智力追求。
本系列后续文章将深入探讨 Aboulafia 算法与现代计算理论的惊人重合,以及它如何揭示出比单纯的历史趣闻更深远的意义。
