第 1 章 · 组合分析

1.3 排列

Permutations
学习目标
  • 能陈述排列全排列的定义,说明“选取 + 排序”两个要素;
  • 会用计数基本原理逐位填空,独立推导排列数公式 \(P(n,k)=n(n-1)\cdots(n-k+1)=n!/(n-k)!\);
  • 能解释 \(0!=1\) 这一约定的组合意义,并熟练计算阶乘与排列数;
  • 能依据“是否允许重复”“次序是否重要”两个判别问题,判断实际问题应使用排列、乘法原理还是后续章节的工具;
  • 体会阶乘的爆炸增长(\(20!\approx 2.4\times10^{18}\)),并能据此估计枚举计算的规模与整数溢出风险。

1. 什么是排列:次序就是信息

上一节的计数基本原理(乘法原理)解决的是“分阶段过程的结果总数”问题。本节把它应用到一类最基本、也最常见的计数对象上——按次序安排一组对象。赛跑要分出名次,颁奖台上的金、银、铜牌各归其主;书架上的书有左右之分;密码的每一位有先后位置。在这些情境里,“谁排在前、谁排在后”本身就是结果的一部分:同样三个人按不同顺序登上领奖台,是三个不同的结果。我们把这类计数问题统称为排列问题。

定义 1 排列

设 \(S\) 是含 \(n\) 个不同对象的集合。从 \(S\) 中任取 \(k\) 个对象(\(1\le k\le n\))按照一定次序排成一列,称为从 \(n\) 个不同对象中取 \(k\) 个对象的一个排列(permutation);当 \(k=n\) 时称为全排列(full permutation)。所有这样的排列的总个数称为排列数(number of permutations),记作 \(P(n,k)\)(国内教材也常记作 \(A_n^k\),Ross 原书记作 \(n!/(n-k)!\))。

排列包含两个动作:先从 \(n\) 个对象中选取 \(k\) 个,再把它们排定次序(order)。定义隐含两条限制:对象两两不同;每个对象至多出现一次,即不允许重复选取。若允许重复(如电话号码各位数字可以相同),问题不属于此处的排列,应直接回到计数基本原理(见第 4 小节)。

先用最小的例子把概念看清楚:把字母 A、B、C 排成一列,一共能排出多少个不同的“单词”?图 1 的树形图(tree diagram)给出了完整答案——每条从根到叶的路径就是一个排列。

第 1 位(3 种) 第 2 位(2 种) 第 3 位(唯一) 起点 A B C B C A C A B ABC ACB BAC BCA CAB CBA 每层分支数依次为 3、2、1 —— 由计数基本原理,全排列共 3×2×1 = 6 = 3! 种
图 1:字母 A、B、C 的全部 6 个排列。第 3 位(虚线段)只剩唯一字母可选。树形图共有 \(3\times2\times1=6\) 条根到叶路径,对应 \(3!=6\) 个全排列。
注记 与 1.2 节树形图的同与不同

图 1 与 1.2 节的菜单树形图形似而“神”不同:菜单问题中每层的选择数固定不变(前菜 3 种、主菜 5 种);这里第 1 层 3 个分支、第 2 层只剩 2 个、第 3 层只剩 1 个——对象一旦用过便从后续阶段中除去。关键在于:每一层的选择数只依赖层数(还剩多少对象可用),而不依赖之前具体选了谁,因此计数基本原理的条件依然满足,结果数就是各层分支数的连乘积。这正是下面定理的证明思路。

2. 排列数公式与阶乘

把图 1 的“三层树”推广到一般的 \(n\) 与 \(k\),就得到本节的核心公式。

定理 1 排列数公式

\[ P(n,k)=n(n-1)(n-2)\cdots(n-k+1)=\frac{n!}{(n-k)!},\qquad 1\le k\le n. \] 特别地,取 \(k=n\) 得全排列数 \(P(n,n)=n\,!\)。

证明把“从 \(n\) 个不同对象中取 \(k\) 个排成一列”分阶段进行:第 1 位可从 \(n\) 个对象中任取,有 \(n\) 种;不论第 1 位取谁,第 2 位都从剩下的 \(n-1\) 个对象中取,有 \(n-1\) 种;依此类推,第 \(k\) 位从剩下的 \(n-k+1\) 个对象中取,恰有 \(n-k+1\) 种。每个阶段的选择数只与该阶段尚存的对象个数有关,与前面的具体结果无关,满足计数基本原理的条件,故 \[ P(n,k)=n(n-1)\cdots(n-k+1). \] 又 \(n!=n(n-1)\cdots(n-k+1)\cdot(n-k)!\),约去公因子 \((n-k)!\) 即得第二个等式。证毕。
定义 2 阶乘

\[ n! = n\times(n-1)\times(n-2)\times\cdots\times2\times1 \qquad (n=1,2,3,\ldots), \] 读作“\(n\) 阶乘”(\(n\) factorial);并约定 \(0!=1\)。

约定 \(0!=1\) 并非任意的硬性规定,而是三条相互一致的理由:(i) 把 \(0\) 个对象排成一列恰有一种方式(“空排列”),故 \(P(n,0)=1\),而公式给出 \(n!/n!=1\),正要求 \(0!=1\);(ii) 递推关系 \(n!=n\cdot(n-1)!\) 若对 \(n=1\) 也成立,即 \(1!=1\times0!\),同样要求 \(0!=1\);(iii) 下一节的组合数 \(\binom{n}{k}=n!/(k!(n-k)!)\) 在 \(k=0\) 与 \(k=n\) 处取值为 \(1\),也依赖这一约定。

例 1 赛跑的前三名

9 名选手参加百米赛跑,设前三名分别获得金、银、铜牌(不设并列)。领奖台上“人—奖牌”的搭配共有多少种可能?

冠军可从 9 人中任取,有 \(9\) 种;无论冠军是谁,亚军都从剩下 \(8\) 人中产生,有 \(8\) 种;季军再从剩下 \(7\) 人中产生,有 \(7\) 种。由计数基本原理, \[ 9\times8\times7=504, \] 即 \(P(9,3)=9!/(9-3)!=9!/6!=362880/720=504\)。注意名次是有序的:同样三个人按不同顺序登台对应不同的奖牌分配,是彼此不同的结果——这正是排列问题的特征。
例 2 书架上的书

把 5 本互不相同的书放到一个 5 层书架上,每层恰放一本,共有多少种放法?若书架只有 3 层(3 格),又有多少种?

5 格全排:自下而上(或自上而下)逐层放书,选择数依次为 \(5,4,3,2,1\),故 \[ P(5,5)=5!=5\times4\times3\times2\times1=120. \] 只有 3 格时:\(P(5,3)=5\times4\times3=60\),用阶乘表示即 \(5!/(5-3)!=120/2=60\)。同一个“放书”问题,格数从 5 变 3,公式自动完成从全排列到选排列的切换。
例 3 数字互不相同的电话号码

某地固定电话号码为 7 位。若要求 7 位数字互不相同(首位允许为 0),共能编出多少个不同的号码?若还要求首位不为 0 呢?

从左到右逐位填数字:第 1 位有 \(10\) 种,第 2 位(不论前面填了什么)有 \(9\) 种,……第 7 位有 \(4\) 种。故 \[ P(10,7)=10\times9\times8\times7\times6\times5\times4=604800, \] 即 \(10!/(10-7)!=10!/3!=3628800/6=604800\)。若要求首位不为 0:首位只能取 \(1\)–\(9\),有 \(9\) 种;其余 6 位从含 \(0\) 在内的 \(9\) 个数字中不重复地取,有 \(9\times8\times7\times6\times5\times4=60480\) 种,合计 \[ 9\times9\times8\times7\times6\times5\times4=544320. \] 此时各阶段的选择数不再全部相同,但仍是“事先可数”的,计数基本原理照样适用——遇到附加限制时,把它折算进相应阶段的选择数即可。

3. 阶乘的爆炸增长

公式 \(P(n,n)=n!\) 形式上极其简单,数值上却增长惊人:每递增 1,阶乘至少翻倍,因为 \((n+1)!=(n+1)\cdot n!\ge 2\,n!\)。到 \(n=20\) 时,\(20!\approx 2.43\times10^{18}\),已逼近 64 位整数所能表示的上限。图 2 用柱状图展示了 \(n=1,\ldots,10\) 时 \(n!\) 的量级——注意纵轴采用对数刻度(logarithmic scale):柱高与 \(\lg(n!)\) 成正比,柱顶标注的是真实数值。即便在对数刻度下,柱高依然近乎匀速上扬,意味着真实数值呈指数式飙升。

1 2 6 24 120 720 5040 40320 362880 3628800 1 2 3 4 5 6 7 8 9 10 10¹ 10² 10³ 10⁴ 10⁵ 10⁶ 1 n lg(n!) 纵轴为对数刻度:柱高 ∝ lg(n!),柱顶标注真实数值
图 2:阶乘的爆炸增长(\(n=1,\ldots,10\),对数刻度)。\(1!=1\) 对应高度 \(0\)(仅剩底部的短标记)。\(10!\) 已达 362 万;到 \(n=20\) 时 \(20!\approx2.43\times10^{18}\)——即使每纳秒枚举一种排列,穷举 \(20!\) 也需要约 77 年。

下表给出若干具体的阶乘数值,供本节及后续各节查阅。

表 1:阶乘数值一览(\(n=1,\ldots,10\) 及几个大值)
\(n\)\(n!\)直观参照
11空无一物的对照:只有一种“排法”
22
36图 1 的三字母全排列
424
51205 本书排满 5 格书架(例 2)
6720PENCIL 的字母全排列(练习 2)
75 040
840 320
9362 880
103 628 800每秒枚举一种,穷举需约 42 天
136 227 020 800已超出 32 位有符号整数上限
151 307 674 368 000
202 432 902 008 176 640 000\(\approx 2.43\times10^{18}\),约为宇宙年龄的 56 倍(秒)
注记 用时间建立数量级直觉

三个换算可以帮助体会阶乘增长之快:(i) 若每秒枚举一种排列,穷举 \(10!=3\,628\,800\) 种需 \(3\,628\,800\) 秒 \(\approx 42\) 天;(ii) 同样速度穷举 \(20!\) 需约 \(2.43\times10^{18}\) 秒 \(\approx 7.7\times10^{10}\) 年(约 770 亿年),约为宇宙年龄(约 138 亿年)的 56 倍——穷举在计算上永远不可行,这正是需要计数公式的根本原因;(iii) 编程实现时须警惕整数溢出:\(13!\) 已超出 32 位有符号整数的上限(约 \(2.1\times10^9\)),\(21!\approx5.1\times10^{19}\) 超出 64 位的上限(约 \(9.2\times10^{18}\)),大阶乘运算应改用对数或斯特林(Stirling)近似来估计量级。

例 4 球入盒:\(n\) 个球与 \(n\) 个盒子

把 \(n\) 个两两不同的球放入 \(n\) 个两两不同的盒子,每个盒子里恰放一个球,共有多少种放法?

给盒子编号 \(1,2,\ldots,n\)。第 1 个盒子的球可从 \(n\) 个中任取,有 \(n\) 种;第 2 个盒子有 \(n-1\) 种;……最后一个盒子只剩 1 个球,只有 1 种。由计数基本原理,共 \[ n(n-1)(n-2)\cdots1=n! \] 种放法。另一种看法更有启发性:把盒子顺序固定,每一种放法唯一确定“第 1 盒放哪个球、第 2 盒放哪个球、……”的一个序列,这恰是 \(1,2,\ldots,n\) 的一个排列;反过来,每个排列也给出一种放法。二者建立了一一对应(one-to-one correspondence),故个数相等,均为 \(n!\)。“建立一一对应,把未知计数化为已知计数”是组合分析最常用的策略,本书将反复使用。

4. 何时使用排列:一个判别准则

面对一个实际计数问题,建议依次追问两个问题。问题一:允许重复吗?排列要求每个对象至多用一次。若允许重复选取(如密码各位字符可重复、电话号码各位数字可相同),应直接用计数基本原理得 \(n^k\),那不是排列。问题二:次序重要吗?交换两个已选对象的位置,结果是否随之改变?若改变——名次、席位、出场先后、密码的字符位置——就是排列问题;若不改变——委员会的成员名单、一次握手的双方、分组名单——次序不携带信息,按排列计数会对同一结果重复计入 \(k!\) 次,正确的工具是 1.4 节的组合。

对比一组例子:“从 10 人中选 3 人分别担任班长、学习委员、文体委员”,三个职务各不相同,交换两人的职务得到不同的班委,故为排列:\(P(10,3)=10\times9\times8=720\)(见练习 1);而“从 10 人中选 3 人组成委员会”,3 人不分次序、不分角色,应为组合:\(\binom{10}{3}=120\)。两数恰好相差 \(3!=6\) 倍——这正揭示了排列与组合的一般关系:排列数 = 组合数 \(\times k!\),其完整讨论见 1.4 节。

注记 常见误区与后续展望

(a) 不要一见到“安排”“选人”就套用 \(n!\):先检验次序是否真的重要,否则会成倍多算。(b) 若对象本身有重复(如单词 LEVEL 含两个 L、两个 E),交换相同字母并不产生新的可区分排列,直接用 \(n!\) 会多算,其修正公式 \(n!/(n_1!n_2!\cdots n_r!)\) 将在 1.5 节多项式系数中给出(见练习 3 的预演)。(c) \(0!=1\) 是“空排列恰有一种方式”这一事实的体现,而非人为的硬性规定,它在例 3 的 \(10!/3!\)、定理 1 取 \(k=n\) 等处已反复发挥作用。

5. 本节小结

要点回顾
  • 排列 = 选取 + 排序:从 \(n\) 个不同对象中取 \(k\) 个排成一列;对象互异且不许重复选取。
  • 排列数公式:\(P(n,k)=n(n-1)\cdots(n-k+1)=\dfrac{n!}{(n-k)!}\);全排列 \(P(n,n)=n!\);约定 \(0!=1\)(空排列恰有一种)。
  • 证明思路:逐位填空——第 \(i\) 位恰有 \(n-i+1\) 种选择,各阶段选择数不依赖前面的结果,计数基本原理连乘即得。
  • 阶乘爆炸增长:\(10!\approx3.6\times10^6\),\(20!\approx2.43\times10^{18}\);穷举不可行,计算须防整数溢出。
  • 判别准则:允许重复 \(\to n^k\)(乘法原理);次序无关 \(\to\) 组合(1.4 节);对象含重复 \(\to\) 多项式系数(1.5 节)。

练习

练习 1-3-1

某班要从 10 名候选人中选出班长、学习委员、文体委员各 1 人(任何人不得兼任),共有多少种选法?若 3 个职务改为“组成一个 3 人代表团”(不分角色),又有多少种?

答案与提示

职务两两不同,交换两人职务得到不同班委,是排列:\(P(10,3)=10\times9\times8=720\)。代表团不分次序,是组合:\(\binom{10}{3}=120\)(1.4 节),恰为前者的 \(1/3!\)。此题对比正是第 4 小节判别准则的直接应用。

练习 1-3-2

英文单词 PENCIL 的 6 个字母互不相同。(a) 6 个字母的全排列共有多少个? (b) 任取其中 4 个字母排成一列,共有多少个?

答案与提示

(a) \(6!=720\)。(b) \(P(6,4)=6\times5\times4\times3=360\),即 \(6!/(6-4)!=720/2=360\)。注意“字母互不相同”是使用排列公式的前提——这正是下一题的反面。

练习 1-3-3

单词 LEVEL 由 L、L、E、E、V 五个字母组成。它的 5 个“字母”共有 \(5!=120\) 个排列吗?

答案与提示

不是。两个 L 互换位置、两个 E 互换位置都不产生新的可区分排列,因此 \(120\) 中每一“真正不同的排法”被数了 \(2!\times2!=4\) 遍,实际只有 \(5!/(2!\,2!)=120/4=30\) 种。一般地,\(n\) 个对象中有重复(第 \(i\) 种出现 \(n_i\) 次)时,排列数为 \(n!/(n_1!\,n_2!\cdots n_r!)\),即 1.5 节的多项式系数——本题为那一节做了预告。

练习 1-3-4

证明恒等式:\(1\cdot1!+2\cdot2!+\cdots+n\cdot n!=(n+1)!-1\)。

答案与提示

利用裂项 \(k\cdot k!=(k+1-1)\,k!=(k+1)!-k!\),求和时相邻项依次相消(telescoping sum,裂项相消):\(\sum_{k=1}^{n}\big[(k+1)!-k!\big]=(n+1)!-1!\)。验证 \(n=3\):\(1+4+18=23=4!-1\)。此恒等式也说明“前 \(n\) 项之和总比下一个阶乘少 1”,可视为阶乘增长的一种累积刻画。