返回

文章详情

被忽视了700年的13世纪枚举算法

Hacker News2026年7月7日 23:45

这是我在研究卡巴拉大师亚伯拉罕·阿布拉菲亚(1240年-1291年后)的著作时发现的一系列文章中的第一篇。这项发现涉及到Tserouf,卡巴拉的一个字母排列艺术——用简单的数学术语来说,它是n个字母单词的所有排列的枚举。背景在《Or ha-Sekhel(理智之光)》中,阿布拉菲亚规定了一种系统的方法来枚举所有可能的n个字母单词的排列。这一方法在一种灵性实践的框架内构思,然而它蕴含了显著的数学结构的严谨性。对于一个三字母单词,阿布拉菲亚明确给出了Tserouf——所有六个排列的顺序:这些单词按首字母分为三组:首先是以a开头的单词;然后是以b开头的单词;最后是以c开头的单词。阿布拉菲亚明确提到三字母的两个规则:规则1——镜像。整个序列必须以与其开始时相反的方式结束。阿布拉菲亚直言不讳:“最后的发声是第一个的相反。”第一个单词是abc;最后一个必须是cba,首尾相反。规则2——保持首字母。尽可能长时间地保持首字母,然后再放开。你需要先用完所有以a开头的单词,然后是以b开头的单词,最后是c。首字母在必须的时候才会改变。这两个规则几乎足以强制完整的三字母顺序。保持首字母的规则将三组按顺序排列为a,b,c。在一组内,只有最后两个字母可以交换,而镜像规则则将第一组固定下来——它必须以abc开始——最后一组则必须以cba结束。几乎可以——但有一个案例困扰着我:为什么bca在bac之前,而不是反过来?这两个规则似乎并不能强迫这一点。这个小小的问题正是整个发现的引擎。有时候,一个简单的问题实际上是非常珍贵的。我无法放下它几个月——而,事实证明,追踪这个问题促使了这一系列的所有内容。从n到n+1:转动轮子你如何从三字母的顺序过渡到四字母的顺序?阿布拉菲亚给出了一条更多的规则,这也是整个事情的核心:回到开始,将第一个字母送到单词的末尾。也就是说,将单词旋转一个步骤。abcd变成bcda,变成cdab,变成dabc——四个旋转,四个首字母,四组。在每组内部,你对剩余的字母施加相同的方法。每四行由单词的一个旋转引领,而每一行都是应用于剩余字母的三字母顺序的完整副本。统一规则这是揭示阿布拉菲亚天才所在的地方。整个过程——无论是对于三个字母、四个字母、十个字母或任何数量——都由一个操作支配,这个操作在每个级别反复应用:将第一个字母送到最后。正是这种单一的旋转将你从一个组带到下一个组。在顶层,它是相同的旋转,将其应用于剩下的字母,逐层构建每个组。再下面一层。单一的手势走遍了整个嵌套的排列层级。随着单词变长,这一方法并不会变得更加复杂;它只是将相同的操作重新应用于越来越短的子单词。这就是计算机科学家所称的递归算法——而且这是一个非常经济的算法。这个规则可以明确地陈述,但它会生成所有n!的排列,每个排列仅一次,并使你回到开始。阿布拉菲亚在章节的第一行就命名了整个事情:这个规则易于理解;尽管它没有我们可以掌握的终点,但它必然会有一个终点。三个从句,三个时刻:规则是简单的;它展开的内容超越了我们能理解的任何事物;然而,这一过程是有限的——它是闭合的,必然有一个结束。其他唯一做到这件事的人我当时不知道,这一切有多么重要。直到17世纪,没有人除了阿布拉菲亚给出了排列的排序。其他所有的传统——每一个其他的卡巴拉教士——只是将它们列在表格中。在bca和bac之间的这个小选择,正是世界上唯一系统方法的可见顶端。这里有一个引人注目的历史平行。唯一与之独立发明出基于规则的遍历所有排列的方法的人是17世纪的英国钟声敲响者。钟声敲响者在钟楼中找到了他们的顺序;阿布拉菲亚在一种灵性实践中找到了自己的顺序。虽来自不同的世界,却有相同的目标:一种遍历整个排列空间(不漏掉任何一个,也不重复任何一个)的方法。而阿布拉菲亚在13世纪就做到这一点——比钟声敲响者早了三百年,而比计算机科学早了七百年。这一切将去往何处因此阿布拉菲亚给出了一个真正的递归排列算法。仅此一项已经是一个不错的历史注释。但还有更多。他的

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡