挑战16 分钟未开始

对应与双射计数

核心概念

双射原理:若两个有限集合 A,BA,B 之间存在一一对应(双射),则 A=B|A| = |B|。于是,要数一个难数的集合,可以把它和一个好数的集合建立一一对应,转而去数后者。

两个经典对应:

  • 子集 ↔ 0/1 串:nn 元集合的子集,对应长度 nn 的 0/1 串(每个元素"选/不选"),故子集共 2n2^n 个;
  • 格点最短路 ↔ 排列:从 (0,0)(0,0) 沿向右/向上走到 (m,n)(m,n) 的最短路径,对应一串由 mm 个"右"和 nn 个"上"组成的序列,共 Cm+nmC_{m+n}^{m} 条。

直观理解 · 动手试试

双射是计数里最优雅的思想:与其硬数,不如换个等价的东西数。一个组合对象难以直接计数时,如果能给它配上一个"影子"——另一个一目了然的对象,并保证两者一一对应,那么数影子就等于数本身。

关键在于"对应必须是一一的":既不能两个原对象对到同一个影子(否则少算),也不能有影子无原象(否则多算)。常用的影子有 0/1 串、格点路径、排列等。学会把陌生的计数翻译成熟悉的对象,是组合高手的标志性能力。

双射计数

从 (0,0) 到 (3,3) 的最短路径

每条路径 ↔ 用 3 个「右」和 3 个「上」排成的序列,共 C(6, 3) = 20
3
3

把「难数的路径」对应到「好数的序列」:共走 m+n 步,选哪 m 步向右即可,故路径数 = C(m+n, m)。

例题 1子集计数

证明 nn 元集合恰有 2n2^n 个子集。

查看解答步骤

答: 2ⁿ

例题 2格点最短路

(0,0)(0,0) 每次向右或向上一格,走到 (3,3)(3,3),有多少条最短路径?

查看解答步骤

答: C(6,3)=20

即时练习

44 元集合有多少个子集?

24=162^4 = 16

(0,0)(0,0) 向右/向上走到 (3,3)(3,3) 的最短路径有几条?

C63=20C_6^3 = 20

(0,0)(0,0) 向右/向上走到 (3,2)(3,2) 的最短路径有几条?

55 步选 33 步向右:C53=C52=10C_5^3 = C_5^2 = 10

双射原理要求两集合之间的对应是?

一一对应(既不重复也不遗漏)多对一一对多任意对应即可

必须是双射(一一对应),才能保证两集合元素个数相等。

    长度为 33 的 0/1 串共有多少个?

    每位 22 种选择,23=82^3 = 8

    易错点

    • 对应不是一一的。 若两个原对象对到同一影子,会少算;有影子无原象会多算。
    • 格点路步数算错。(m,n)(m,n)m+nm+n 步,从中选 mm 步向右,即 Cm+nmC_{m+n}^m
    • 子集计数漏掉空集和全集。 2n2^n 已包含空集与全集两个极端。

    下一步

    前置知识点