双射法

双射法是组合数学中的一种重要的证明方法，用来证明两个有限集合A和B的元素数目相等。证明的思路是构造一个双射映射f : A → B，于是根据双射的性质，A和B的元素数目就是相等的。这个证明是构造法证明的一种。由于双射法是给出具体的映射构造，而不是分别点算两个集合，所以不需要知道两个集合的元素个数。这种证明可以用于难以直接对两个集合或其中一个集合进行计数的情况。此外，双射法也可以用来计算一个集合（难以直接计算时），方法是将它映射到一个可以拆分或比较容易计算的集合。而作为构造性证明，双射法用到的f也许可以用来更深刻地分析集合本身的性质。 二次项系数具有一定的对称性： ( n k ) = ( n n − k ) . {\displaystyle {n \choose k}={n \choose n-k}.} 证明：这个等式可以视为两个集合的元素个数。考虑以下n个元素的集合： S = { a 1 , a 2 , ⋯ , a n } {\displaystyle S=\{a_{1},a_{2},\cdots ,a_{n}\}} ，那么以下两个集合： A = { C ⊂ S , | C | = k } , B = { C ⊂ S , | C | = n − k } {\displaystyle A=\{C\subset S,\,|C|=k\},\qquad \,B=\{C\subset S,\,|C|=n-k\}} 集合A的元素个数是 ( n k ) {\displaystyle {n \choose k}} ，集合B的元素个数是 ( n n − k ) {\displaystyle {n \choose n-k}} . 现在构造一个从集合A到集合B的映射： f : A → B C ↦ C S c {\displaystyle {\begin{aligned}f&:\,\,A\rightarrow B\\&\,\,\,C\,\,\,\mapsto \,\,C_{S}^{c}\end{aligned}}} 对A中的每个元素C（包含集合S中的 k {\displaystyle k} 个元素），映射f把C映射到它在S中的补集（有S中的 n − k {\displaystyle n-k} 个元素），因此在集合B中。可以验证，这个映射是双射。所以集合A的元素个数等于B的元素个数。也就是说 ( n k ) = ( n n − k ) . {\displaystyle {n \choose k}={n \choose n-k}.} 对一个大于2的自然数n，首先考虑将它写成若干个1和2的和，和项顺序不同认为是不同的写法，所有的方法数记作 a n {\displaystyle a_{n}} ，例如当n=4的时候，所有的写法是： 4 = 1 + 1 + 1 + 1 = 1 + 1 + 2 = 1 + 2 + 1 = 2 + 1 + 1 = 2 + 2. {\displaystyle 4=1+1+1+1=1+1+2=1+2+1=2+1+1=2+2.} 所以 a 4 = 5 {\displaystyle a_{4}=5} . 再考虑将它写成若干个大于等于2的自然数的和，和项顺序不同认为是不同的写法，所有的方法数记作 b n {\displaystyle b_{n}} 。则有 a n = b n + 2 . {\displaystyle a_{n}=b_{n+2}.} 这个性质也可以用双射法证明： 证明：考虑集合 A n = { ( x 1 , x 2 , ⋯ , x m ) , m ⩾ 1 , ∀ 1 ⩽ j ⩽ m , x j ∈ { 1 , 2 } , x 1 + x 2 + ⋯ + x m = n } {\displaystyle A_{n}=\{(x_{1},x_{2},\cdots ,x_{m}),\,\,\,m\geqslant 1,\,\,\forall 1\leqslant j\leqslant m,x_{j}\in \{1,2\},\,\,x_{1}+x_{2}+\cdots +x_{m}=n\}} B n + 2 = { ( y 1 , y 2 , ⋯ , y k ) , k ⩾ 1 , ∀ 1 ⩽ j ⩽ k , y j ⩾ 2 , y 1 + y 2 + ⋯ + y k = n + 2 } . {\displaystyle B_{n+2}=\{(y_{1},y_{2},\cdots ,y_{k}),\,\,\,k\geqslant 1,\,\,\forall 1\leqslant j\leqslant k,y_{j}\geqslant 2,\,\,y_{1}+y_{2}+\cdots +y_{k}=n+2\}.} 对集合 A n {\displaystyle A_{n}} 中的一个元素 ( x 1 , x 2 , ⋯ , x m ) {\displaystyle (x_{1},x_{2},\cdots ,x_{m})} ，假设其中有至少一个数为2，令 x i 1 = x i 2 , ⋯ = x i k = 2 {\displaystyle x_{i_{1}}=x_{i_{2}},\cdots =x_{i_{k}}=2} （其中的下标 1 ⩽ i 1 < i 2 < ⋯ < i k ⩽ m {\displaystyle 1\leqslant i_{1}<i_{2}<\cdots <i_{k}\leqslant m} ），其余的等于1。如果 i k < m {\displaystyle i_{k}<m} ，那么下面设 k + 1 {\displaystyle k+1} 个数： y 1 = x 1 + ⋯ + x i 1 , y 2 = x i 1 + 1 + ⋯ + x i 2 , ⋮ ⋮ y k = x i k − 1 + 1 + ⋯ + x i k , y k + 1 = x i k + 1 + ⋯ + x m + 2. {\displaystyle {\begin{aligned}y_{1}&=x_{1}+\cdots +x_{i_{1}},\\y_{2}&=x_{i_{1}+1}+\cdots +x_{i_{2}},\\&\vdots \quad \quad \quad \vdots \\y_{k}&=x_{i_{k-1}+1}+\cdots +x_{i_{k}},\\y_{k+1}&=x_{i_{k}+1}+\cdots +x_{m}+2.\end{aligned}}} 如果 i k = m {\displaystyle i_{k}=m} 则 y k + 1 = 2 {\displaystyle y_{k+1}=2} 。如果 x 1 = x 2 = ⋯ = x m = 1 {\displaystyle x_{1}=x_{2}=\cdots =x_{m}=1} ，那么设 y 1 = n + 2 {\displaystyle y_{1}=n+2} 。 那么由于各个y元素的和必然是 n + 2 {\displaystyle n+2} ，所以将 ( x 1 , x 2 , ⋯ , x m ) {\displaystyle (x_{1},x_{2},\cdots ,x_{m})} 映射到 ( y 1 , y 2 , ⋯ , y k + 1 ) {\displaystyle (y_{1},y_{2},\cdots ,y_{k+1})} 的映射f是一个从 A n {\displaystyle A_{n}} 到 B n + 2 {\displaystyle B_{n+2}} 的映射。从构造方式可以看出，f是一个单射。 对于 B n + 2 {\displaystyle B_{n+2}} 中每一个元素 ( y 1 , y 2 , ⋯ , y k ) {\displaystyle (y_{1},y_{2},\cdots ,y_{k})} ，将其中的每一个 y j {\displaystyle y_{j}} 换成 y j − 2 {\displaystyle y_{j}-2} 个1和一个2，然后删去最后一个2，就得到 A n {\displaystyle A_{n}} 中的一个元素，所以f也是一个满射。 也就是说，f是一个双射。这就证明了 a n = b n + 2 . {\displaystyle a_{n}=b_{n+2}.} 其他組合技巧，如： 算兩次 抽屜原理 Loehr, Nicholas A. (2011). Bijective CombinatoricsArchive-It的存檔，存档日期2015-10-23. CRC Press（页面存档备份，存于互联网档案馆）. ISBN 143984884X, ISBN 978-1439848845.