5.3 顶点不可自由标号时When the vertices are not freely labeled
本页为译文 + 高中讲解合一:黑色正文为忠实翻译;彩色框(目标 / 定义 / 定理 / 例 / 分步推演)与配图为面向高中生的详解,逐步推演、举例、画图,不用比喻。
在某些情形里,我们会用一种很自然的方式去限制树的顶点所能取的标号。本节就来讨论由此产生的若干计数问题。
5.3.1 先说清楚“自由标号”是什么
回忆一下前面用到的对象。一棵有根有标号树(rooted labeled tree)是这样得到的:取 \(n\) 个顶点,把数字 \(1,2,\dots,n\) 一一对应地贴在顶点上(这就是“标号”),再用 \(n-1\) 条边把它们连成一棵树,并指定其中一个顶点为根(root)。所谓自由标号(freely labeled),意思是:哪个数字贴到树的哪个位置上,没有任何额外限制。
- 自由标号:把 \(1,\dots,n\) 这 \(n\) 个数字任意一一对应地放到 \(n\) 个顶点上,每一种放法都算一棵合法的树。
- 受限标号(not freely labeled):放数字时必须满足某条规则——只有满足规则的放法才算合法。最常见的规则是“沿着从根往下走的方向,号码必须递增”。
5.3.2 一种典型的受限:递增树
当标号不再自由时,最自然、也最重要的一种限制是要求沿着从根往叶子的每条路径,号码严格递增。这样的树叫作递增树(increasing tree)。
注意一个直接的推论:在任何递增树里,根上必然是号码 \(1\)。因为根是所有路径的起点,它的号码必须比沿路所有顶点都小,而 \(1\) 是最小的。这与“自由标号”形成鲜明对比——自由时根上可以是任何数字。
- 把 \(2\) 挂到 \(1\) 下面,再把 \(3\) 挂到 \(1\) 下面:得到“根 \(1\) 带两个儿子 \(2,3\)”的树(路径 \(1\!\to\!2\)、\(1\!\to\!3\) 都递增,合法)。
- 把 \(2\) 挂到 \(1\) 下面,再把 \(3\) 挂到 \(2\) 下面:得到一条链 \(1\!\to\!2\!\to\!3\)(递增,合法)。
- 能不能把 \(3\) 挂到 \(1\) 下、\(2\) 挂到 \(3\) 下?路径 \(1\!\to\!3\!\to\!2\) 在最后一步 \(3\!\to\!2\) 递减,不合法。
5.3.3 递增树到底有多少棵
下面这条结果给出递增树个数的一个干净公式。它的妙处在于:受限标号反而让计数变得更简单。
证明的关键想法是逐个插入顶点:从只有顶点 \(1\) 的树出发,按 \(2,3,\dots,n\) 的顺序把顶点一个一个加进去。每加一个新顶点时,看看它有多少种合法的挂法。
- 设已经有了一棵顶点集为 \([k-1]\) 的递增树(\(k\ge 2\))。现在要把新顶点 \(k\) 加进来。因为 \(k\) 是当前所有号码里最大的,把它挂到任何一个已有顶点的下面,那条新边“父亲 \(<\) 儿子”一定成立——递增性绝不会被破坏。
- 所以顶点 \(k\) 的合法挂法数,恰好等于“它能挂到哪个父亲下面”的选择数,也就是当前树里已有的顶点个数 \(k-1\)。即新顶点有 \(k-1\) 种挂法,且每一种都给出一棵不同的递增树。
- 从顶点 \(1\) 起步(\(1\) 棵),依次加入 \(2,3,\dots,n\),由乘法原理(product principle),递增树总数为 \[(2-1)\times(3-1)\times\cdots\times(n-1)=1\cdot 2\cdots (n-1)=(n-1)!.\]
- 反过来,任何一棵 \([n]\) 上的递增树都能由这套插入过程唯一地重建(先去掉号码最大的顶点 \(n\),它必是叶子,得到 \([n-1]\) 上的递增树,如此回溯),所以这种数法不重不漏。♦
- \(n=1\):\((1-1)!=0!=1\)。只有孤零零一个顶点 \(1\),确实 \(1\) 棵。
- \(n=2\):\((2-1)!=1!=1\)。只能是 \(1\) 在上、\(2\) 在下的链,\(1\) 棵,对。
- \(n=3\):\((3-1)!=2!=2\)。与上面手数的 \(2\) 棵一致。
- \(n=4\):\((4-1)!=3!=6\)。按插入法看:加 \(2\) 有 \(1\) 种,加 \(3\) 有 \(2\) 种,加 \(4\) 有 \(3\) 种,\(1\cdot2\cdot3=6\)。
5.3.4 对照:自由标号要多得多
把上面的结果和自由标号情形并排放,能更直观地看出“限制标号”带来的差别。按 5.2 节,顶点集为 \([n]\) 的有根有标号树共有 \(n^{\,n-1}\) 棵(凯莱公式 Cayley's formula 的有根版本)。而递增树只有 \((n-1)!\) 棵。下表把两者列出来。
- 顶点集为 \([5]\) 的递增树有几棵?请直接用公式 (5.6) 给出。
- 在 \([4]\) 的递增树里,号码 \(4\) 一定是叶子吗?请说明理由。
- 形状固定为一条“竖链”(每个顶点至多一个儿子)的 \([n]\) 上的树,有多少棵是递增树?(提示:竖链上的号码从根到底必须严格递增,这唯一地决定了一种排法。)
返回 全书目录