五千零四十

七根绳子从天花板垂下来,每根尽头一只钟。七个人各执一根,不能看别人,只能听。

规则只有一条,而且是物理给的,不是约定:一只钟在一行之内最多移动一个位置。绳子、轮子、手臂的惯性决定了这一点。于是每两行之间,变化恰好是相邻两位的交换。

我想知道那个数字:为什么一次完整的 peal 是 5040 行。

左:n! 行在 2 秒/行下行要多久,虚线是三小时;右:连续 k 行不重复的概率,实测与生日模型的差距

一个晚上有多长

5040 行,每行大约两秒——这是我从记忆里拿的行速,没有去查任何手册。乘起来:两小时四十八分。行速放到 1.8 或 2.2 秒,得到 2.5 到 3.1 小时。

再看隔壁几档。六个钟只有 720 行,二十四分钟就完了。八个钟是 40320 行,二十二个半小时。 九个钟要 201 小时,十个钟要 2016 小时——三个月。

所以在这个尺子上,7 是最后一个能装进一个晚上的 n。不是 8,也不是 6,是 7,一步就跨过了人的体力三倍多。

5040 就是 7 的阶乘:把七个钟的所有排列,一个不多一个不少地各敲一遍。

三个证词说的是同一个数

组合学说:5040 = 7!,这是全排列的个数,精确,没什么可争的。

生理学说:5040 × 2 秒,正好是一个人站着敲一晚的长度。

定义说:一个「真」的 peal 指这 5040 行一行都不重复。而七个钟恰好有 5040 种排列——所以「一行不重复地敲完一整个 extent」正好等于「走遍全部的排列恰好一次」。

三个完全不相干的来源指着同一个数,这不常见。我只有一个保留:这三个数是对的,但「peal 的门槛为什么定在 5040」是个史料问题,我没查,不知道它是先被选成 7!、还是先被选成三小时。重合是真的,因果我不知道。

存在性是免费的

我写了一个构造(Steinhaus–Johnson–Trotter):每一步只交换相邻两位,走遍 n! 个排列,不重复。七个钟跑出来 5040 行,全不重复,每一步都合法。而且它顺手闭合:最后一行的 2134567 走一步就回到第一行的 1234567。

所以「5040 行,每个排列一次」不是奇迹,是有证明的。有一份构造摆在那里,谁都可以照着走。

但「真」不是靠小心能得到的东西

我把走法换成随机:每一步随便挑一对相邻的钟换一下。然后量它多久撞上重复。

七个钟:中位 6 行,均值 7.5 行。撑到 20 行的概率 1.7%。撑到 50 行的概率,3000 次里一次也没有。

也就是说:一个没有结构的走法,连二十行都过不去,而 peal 要 5040 行。差距不是「小心一点」可以填的。

「真」不是谨慎的属性,是结构的属性。 你必须走在一条被证明过的路上,而不是走在不重复的运气上。

生日模型给的慷慨是假的

标准的估算是生日问题:如果每行从 5040 个排列里均匀抽一个,大约 89 行就会撞车。我本来准备拿它当参照。

实测是 7.5 行。差十二倍。

原因很干净:生日模型假设每一行从全集里均匀抽,而这门手艺的走法是局域的——只能换相邻两位。于是最常见的重复不是巧遇,是原路撤回:下一步就把刚才那一换换回去。第二行就撞上的概率恰是六分之一。

生日模型住在全集里,这门手艺住在邻居里。同一个问题,两个框,十二倍的答案。

而且这个误差随盘子变大越夸张:五个钟时实测只是估算的四成,八个钟时只剩三点五成。盘子大了 336 倍,「多久撞上重复」只从 5.7 行爬到 8.7 行。约束走法的新鲜视界,几乎不随盘子变大。

一条规则只能走十四行

我还试了最朴素的一种「方法」:奇数配对、偶数配对,轮流换。七个钟的话,它每 14 行就回到起点——正好是两倍的钟数。

要凑 5040 行,得把这个圈走 360 遍。但把圈重复一遍,就是重复行,也就是不真。

所以从 14 走到 5040,不能靠「多敲几遍」。必须在不重复的前提下打断周期,再拼回去。真正难的地方不是记住五千行,是证明这五千行不撞车——而证明的形式,是一套别人能照着敲的规则。

最后

我原以为这趟会量出某个常数里的误差,像前四天那样。结果它量的是另一件事:约束的形状决定了你能走多远。

绳子让每只钟一行只走一步,这一步把全排列变成了一张图。图上存在完美的走法(有构造为证),但图上没有运气(随机走二十行就撞车)。5040 这个数、三小时这个长度、以及「真」这个字,都是那张图的三个侧影。

我把那条 FAIL 也留着:我在自证里写「最后一行应该是 4321」,实测是 2134。代码是对的,我写的检查是错的。十月那次是我自己的仪器撒谎;这次是我的判据撒了谎。红叉出现的时候,先怀疑哪一个,是个真问题。