组合数#
普通定义#
( n m ) = n ! m ! ( n − m ) ! ( n m ) = n ! m ! ( n − m ) !
这里,当 n < m n < m 时,认为该式值为 0 0 。
扩展定义#
( n m ) = n m – – m ! ( n ∈ C , m ∈ N ) ( n m ) = n m _ m ! ( n ∈ C , m ∈ N )
基本性质#
对称性#
( n m ) = ( n n − m ) ( n m ) = ( n n − m )
显然。
加法公式#
( n m ) = ( n − 1 m ) + ( n − 1 m − 1 ) ( n m ) = ( n − 1 m ) + ( n − 1 m − 1 )
证明:组合意义。
在 n n 中选 m m 个,可分为两种情况:
选第 n n 个,则需在前 n − 1 n − 1 个中选 m − 1 m − 1 个。
否则需在前 n − 1 n − 1 个中选 m m 个。
上指标求和#
n ∑ i = 0 ( i k ) = ( n + 1 k + 1 ) ∑ i = 0 n ( i k ) = ( n + 1 k + 1 )
证明:数学归纳法。
n = k n = k 时,显然有 ( k k ) = ( k + 1 k + 1 ) ( k k ) = ( k + 1 k + 1 )
n > k n > k 时,设结论在 N ∩ [ 0 , n − 1 ] N ∩ [ 0 , n − 1 ] 上成立,根据加法公式,有:
( n + 1 k + 1 ) = ( n k ) + ( n k + 1 ) = ( n k ) + n − 1 ∑ i = 0 ( i k ) = n ∑ i = 0 ( i k ) ( n + 1 k + 1 ) = ( n k ) + ( n k + 1 ) = ( n k ) + ∑ i = 0 n − 1 ( i k ) = ∑ i = 0 n ( i k )
因此,结论成立。
吸收恒等式#
m ( n m ) = n ( n − 1 m − 1 ) m ( n m ) = n ( n − 1 m − 1 )
( n m ) ( m k ) = ( n k ) ( n − k m − k ) ( n m ) ( m k ) = ( n k ) ( n − k m − k )
证明:第一个式子显然是第二个式子在 k = 1 k = 1 时的特殊情况,所以只需证明第二个式子。
组合意义。从 n n 中选出 m m 个,再从这 m m 个中选 k k 个,等价于先从 n n 中选出 k k 个,再把这 k k 个与另外 m − k m − k 个凑出 m m 个。
范德蒙德卷积#
∑ i + j = m = ( k i ) ( n − k j ) = m ∑ i = 0 ( k i ) ( n − k m − i ) = ( n m ) ∑ i + j = m = ( k i ) ( n − k j ) = ∑ i = 0 m ( k i ) ( n − k m − i ) = ( n m )
证明:组合意义。考虑前 k k 个选几个,把所有情况相加即可。
n ∑ i = 0 i ( n i ) = 2 n − 1 n n ∑ i = 0 i 2 ( n i ) = 2 n − 2 n ( n + 1 ) ∑ i = 0 n i ( n i ) = 2 n − 1 n ∑ i = 0 n i 2 ( n i ) = 2 n − 2 n ( n + 1 )
二项式定理
( a + b ) n = n ∑ i = 0 ( n i ) a i b n − i ( a + b ) n = ∑ i = 0 n ( n i ) a i b n − i
证明:考虑展开 ( a + b ) n ( a + b ) n 后,a i b n − i a i b n − i 的系数,显然为在 n n 个 ( a + b ) ( a + b ) 中选 i i 个 a a 的情况总数。
广义二项式定理#
( x + y ) α = ∑ k ≥ 0 ( α k ) x k y α − k ( α ∈ R ) ( x + y ) α = ∑ k ≥ 0 ( α k ) x k y α − k ( α ∈ R )
练习 1#
求:
n ∑ i = 0 ( n − i i ) ∑ i = 0 n ( n − i i )
解:设原式为 f ( n ) f ( n ) 。
f ( n ) = n ∑ i = 0 ( n − i i ) = n ∑ i = 0 ( n − 1 − i i ) + ( n − 1 − i i − 1 ) = n − 1 ∑ i = 0 ( n − 1 − i i ) + n − 1 ∑ i = 1 ( n − 1 − i i − 1 ) = n − 1 ∑ i = 0 ( n − 1 − i i ) + n − 2 ∑ i = 0 ( n − 2 − i i ) = f ( n − 1 ) + f ( n − 2 ) f ( n ) = ∑ i = 0 n ( n − i i ) = ∑ i = 0 n ( n − 1 − i i ) + ( n − 1 − i i − 1 ) = ∑ i = 0 n − 1 ( n − 1 − i i ) + ∑ i = 1 n − 1 ( n − 1 − i i − 1 ) = ∑ i = 0 n − 1 ( n − 1 − i i ) + ∑ i = 0 n − 2 ( n − 2 − i i ) = f ( n − 1 ) + f ( n − 2 )
又 f ( 0 ) = 1 , f ( 1 ) = 1 f ( 0 ) = 1 , f ( 1 ) = 1 ,故 f ( n ) = F n + 1 f ( n ) = F n + 1 ,其中 F i F i 表示斐波那契数列的第 i i 项。
另一种方法是利用斐波那契数列的组合意义。
求一个 2 × n 2 × n 的棋盘,使用任意多张 1 × 2 1 × 2 的骨牌 完全 覆盖所有格子的方案数。设有 f n f n 种方案。
讨论第 n n 列是被一张竖着放的骨牌覆盖,还是被两张横着放的骨牌覆盖,即可得知 f n = f n − 1 + f n − 2 f n = f n − 1 + f n − 2 。
由于边界为 f 0 = 1 f 0 = 1 ,因此 f n = F n + 1 f n = F n + 1 。用组合数计算。若有 2 i 2 i 张横着放置的骨牌,则一对在同一列上的骨牌会占据两列。
所以先减去 i i 列(肯定会被占用),然后从剩下的列中选 i i 列就是答案。所以 f n = ∑ n i = 0 ( n − i i ) f n = ∑ i = 0 n ( n − i i ) 。
练习 2#
求:
n ∑ i = 0 ( m + i − 1 i ) ∑ i = 0 n ( m + i − 1 i )
解:
n ∑ i = 0 ( m + i − 1 i ) = n ∑ i = 0 ( m + i − 1 m − 1 ) = m + n − 1 ∑ i = 0 ( i m − 1 ) = ( m + n m ) ∑ i = 0 n ( m + i − 1 i ) = ∑ i = 0 n ( m + i − 1 m − 1 ) = ∑ i = 0 m + n − 1 ( i m − 1 ) = ( m + n m )
第一步和第三步分别运用了对称性、上指标求和。
斯特林数#
第二类斯特林数#
{ n m } { n m } 表示将 n n 个不同的元素划分为 m m 个互不区分的非空集合的方案数。
{ n m } = { n − 1 m − 1 } + m { n − 1 m } { n m } = { n − 1 m − 1 } + m { n − 1 m }
边界:{ n 0 } = [ n = 0 ] { n 0 } = [ n = 0 ]
第一类斯特林数#
n n 个人坐在 m m 张非空圆桌上的方案数记为第一类斯特林数,用 [ n m ] [ n m ] 表示。
[ n m ] = [ n − 1 m − 1 ] + ( n − 1 ) [ n − 1 m ] [ n m ] = [ n − 1 m − 1 ] + ( n − 1 ) [ n − 1 m ]
边界:[ n 0 ] = [ n = 0 ] [ n 0 ] = [ n = 0 ]
下降幂和上升幂#
a n – – = a ∏ k = a − n + 1 k a n _ = ∏ k = a − n + 1 a k
a ¯ ¯ ¯ n = a + n − 1 ∏ k = a k a n ¯ = ∏ k = a a + n − 1 k
斯特林数的性质#
下降幂、上升幂与幂的转化#
x ¯ ¯¯¯ ¯ m = m ∑ k = 0 [ m k ] x k x m – – = m ∑ k = 0 ( − 1 ) m − k [ m k ] x k x m = m ∑ k = 0 { m k } x k – – x m ¯ = ∑ k = 0 m [ m k ] x k x m _ = ∑ k = 0 m ( − 1 ) m − k [ m k ] x k x m = ∑ k = 0 m { m k } x k _
通项公式#
{ m k } = 1 k ! k ∑ i = 0 ( − 1 ) k − i ( k i ) i m { m k } = 1 k ! ∑ i = 0 k ( − 1 ) k − i ( k i ) i m
容斥原理#
基本公式#
设 S S 为有限集,A 1 , A 2 , ⋯ , A n ⊆ S A 1 , A 2 , ⋯ , A n ⊆ S ,A = { A 1 , A 2 , ⋯ , A n } A = { A 1 , A 2 , ⋯ , A n } 则有:
| n ⋃ i = 1 A i | = n ∑ k = 1 ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | k ⋂ j = 1 A i j | | ⋃ i = 1 n A i | = ∑ k = 1 n ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | ⋂ j = 1 k A i j |
证明:
设一个元素被 A A 中的 m m 个集合包含,则它对左侧贡献为 1 1 。
它对右侧的贡献为:∑ m i = 1 ( − 1 ) i − 1 ( m i ) ∑ i = 1 m ( − 1 ) i − 1 ( m i ) (从这 m m 个集合中任选几个集合都会包含)
= − ∑ m i = 1 ( − 1 ) i ( m i ) = 1 − ∑ m i = 0 ( − 1 ) i ( m i ) = 1 − ( 1 − 1 ) m = 1 = − ∑ i = 1 m ( − 1 ) i ( m i ) = 1 − ∑ i = 0 m ( − 1 ) i ( m i ) = 1 − ( 1 − 1 ) m = 1
德 · 摩根定律#
¯ ¯¯¯¯¯¯¯¯¯¯¯ ¯ n ⋃ i = 1 A i = n ⋂ i = 1 ¯ ¯¯¯¯ ¯ A i ¯ ¯¯¯¯¯¯¯¯¯¯¯ ¯ n ⋂ i = 1 A i = n ⋃ i = 1 ¯ ¯¯¯¯ ¯ A i ⋃ i = 1 n A i ¯ = ⋂ i = 1 n A i ¯ ⋂ i = 1 n A i ¯ = ⋃ i = 1 n A i ¯
基本公式的变形#
根据德摩根定律变形:
| n ⋂ i = 1 ¯ ¯¯¯¯ ¯ A i | = | ¯ ¯¯¯¯¯¯¯¯¯¯¯ ¯ n ⋃ i = 1 A i | = | S | − n ∑ k = 1 ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | k ⋂ j = 1 A i j | = | S | + n ∑ k = 1 ( − 1 ) k ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | k ⋂ j = 1 A i j | | ⋂ i = 1 n A i ¯ | = | ⋃ i = 1 n A i ¯ | = | S | − ∑ k = 1 n ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | ⋂ j = 1 k A i j | = | S | + ∑ k = 1 n ( − 1 ) k ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | ⋂ j = 1 k A i j |
| n ⋂ i = 1 A i | = | ¯ ¯¯¯¯¯¯¯¯¯¯ ¯ n ⋃ i = 1 ¯ ¯¯¯¯ ¯ A i | = | S | − n ∑ k = 1 ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | k ⋂ j = 1 ¯ ¯¯¯¯¯ ¯ A i j | = | S | + n ∑ k = 1 ( − 1 ) k ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | k ⋂ j = 1 ¯ ¯¯¯¯¯ ¯ A i j | | ⋂ i = 1 n A i | = | ⋃ i = 1 n A i ¯ ¯ | = | S | − ∑ k = 1 n ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | ⋂ j = 1 k A i j ¯ | = | S | + ∑ k = 1 n ( − 1 ) k ∑ 1 ≤ i 1 < i 2 < ⋯ < i k ≤ n | ⋂ j = 1 k A i j ¯ |
子集反演#
定义在两个集合上的函数 f , g f , g ,若
f ( S ) = ∑ T ⊆ S g ( T ) f ( S ) = ∑ T ⊆ S g ( T )
则
g ( S ) = ∑ T ⊆ S ( − 1 ) | S | − | T | f ( T ) g ( S ) = ∑ T ⊆ S ( − 1 ) | S | − | T | f ( T )
以后有时间再证明吧。感觉和二项式反演的证明思路可能差不多。
二项式反演#
这是子集反演的特殊情况:多个集合的交集大小只和集合数目有关,而与具体是哪些集合无关。
我们用 g ( i ) g ( i ) 表示某 i i 个补集的交集大小(即不满足某 i i 个条件的方案数),
f ( i ) f ( i ) 表示某 i i 个原集的交集大小(即钦定 / 至少满足某 i i 个条件的方案数)。
特别地,f ( 0 ) = g ( 0 ) = | S | f ( 0 ) = g ( 0 ) = | S | ,因为 0 0 个条件相当于任意情况。
根据上面的变形公式,我们有:
f ( n ) = | S | + n ∑ k = 1 ( − 1 ) k ( n k ) g ( k ) = n ∑ k = 0 ( − 1 ) k ( n k ) g ( k ) g ( n ) = | S | + n ∑ k = 1 ( − 1 ) k ( n k ) f ( k ) = n ∑ k = 0 ( − 1 ) k ( n k ) f ( k ) f ( n ) = | S | + ∑ k = 1 n ( − 1 ) k ( n k ) g ( k ) = ∑ k = 0 n ( − 1 ) k ( n k ) g ( k ) g ( n ) = | S | + ∑ k = 1 n ( − 1 ) k ( n k ) f ( k ) = ∑ k = 0 n ( − 1 ) k ( n k ) f ( k )
令 h ( k ) = ( − 1 ) k g ( k ) h ( k ) = ( − 1 ) k g ( k ) 再代进去,可以得出:
f ( n ) = n ∑ k = 0 ( n k ) h ( k ) h ( n ) = n ∑ k = 0 ( − 1 ) n + k ( n k ) f ( k ) = n ∑ k = 0 ( − 1 ) n − k ( n k ) f ( k ) f ( n ) = ∑ k = 0 n ( n k ) h ( k ) h ( n ) = ∑ k = 0 n ( − 1 ) n + k ( n k ) f ( k ) = ∑ k = 0 n ( − 1 ) n − k ( n k ) f ( k )
能得出二项式反演:
f ( n ) = n ∑ k = 0 ( n k ) h ( k ) h ( n ) = n ∑ k = 0 ( − 1 ) n − k ( n k ) f ( k ) f ( n ) = ∑ k = 0 n ( n k ) h ( k ) h ( n ) = ∑ k = 0 n ( − 1 ) n − k ( n k ) f ( k )
另一种表述是,若两个序列 f , g f , g 满足:
f n = n ∑ i = 0 ( n i ) g i f n = ∑ i = 0 n ( n i ) g i
则
g n = n ∑ i = 0 ( − 1 ) n − i ( n i ) f i g n = ∑ i = 0 n ( − 1 ) n − i ( n i ) f i
是其充分必要条件。
这里的 f , g f , g 貌似代表什么都可以。
也就是说,我们可以不关心其具体意义,只要在推出这种式子时,知道它能够与另一个式子相互转化就可以了。
也可以用代入法证明(下面为了方便,把序列形式改成了函数形式)。
f ( n ) = n ∑ i = 0 ( − 1 ) i ( n i ) g ( i ) = n ∑ i = 0 ( − 1 ) i ( n i ) i ∑ j = 0 ( − 1 ) i − j ( i j ) f ( j ) = n ∑ i = 0 i ∑ j = 0 ( − 1 ) i − j ( n i ) ( i j ) f ( j ) = n ∑ j = 0 f ( j ) n ∑ i = j ( − 1 ) i − j ( n i ) ( i j ) = n ∑ j = 0 ( n j ) f ( j ) n ∑ i = j ( − 1 ) i − j ( n − j i − j ) = n ∑ j = 0 ( n j ) f ( j ) n − j ∑ k = 0 ( − 1 ) k ( n − j k ) = n ∑ j = 0 ( n j ) f ( j ) ( 1 − 1 ) n − j f ( n ) = ∑ i = 0 n ( − 1 ) i ( n i ) g ( i ) = ∑ i = 0 n ( − 1 ) i ( n i ) ∑ j = 0 i ( − 1 ) i − j ( i j ) f ( j ) = ∑ i = 0 n ∑ j = 0 i ( − 1 ) i − j ( n i ) ( i j ) f ( j ) = ∑ j = 0 n f ( j ) ∑ i = j n ( − 1 ) i − j ( n i ) ( i j ) = ∑ j = 0 n ( n j ) f ( j ) ∑ i = j n ( − 1 ) i − j ( n − j i − j ) = ∑ j = 0 n ( n j ) f ( j ) ∑ k = 0 n − j ( − 1 ) k ( n − j k ) = ∑ j = 0 n ( n j ) f ( j ) ( 1 − 1 ) n − j
这时我们不能直接把后面那项变为 1 1 ,需要分类讨论。
当 n − j ≠ 0 n − j ≠ 0 时,( 1 − 1 ) n − j = 0 ( 1 − 1 ) n − j = 0 。
否则,回到上式,其值为 ∑ 0 k = 0 ( 0 k ) = ( 0 0 ) = 1 ∑ k = 0 0 ( 0 k ) = ( 0 0 ) = 1 。
综上,∑ n j = 0 ( n j ) ( 1 − 1 ) n − j = 1 ∑ j = 0 n ( n j ) ( 1 − 1 ) n − j = 1 。
最终,得出了 f ( n ) = f ( n ) f ( n ) = f ( n ) ,证毕。
另外一种二项式反演的式子也比较常用:
f ( n ) = m ∑ i = n ( i n ) g ( i ) ⟺ g ( n ) = m ∑ i = n ( − 1 ) i − n ( i n ) f ( i ) f ( n ) = ∑ i = n m ( i n ) g ( i ) ⟺ g ( n ) = ∑ i = n m ( − 1 ) i − n ( i n ) f ( i )
证明为把右侧代入左侧,不再赘述。
这个式子的组合意义为 f ( n ) f ( n ) 表示钦定选 n n 个,g ( n ) g ( n ) 为恰好选 n n 个的方案数。如果选择这种组合意义,那么 f ( n ) f ( n ) 是一个无效的数,因为钦定 n n 个表明存在重复的情况。所以“钦定”只能作为转化的工具,在题目中不能独立存在。同样地,在计算 f f 时也不要刻意去重,因为“钦定”的性质已经表明 f f 很可能存在重复情况。
题目常让我们求:
至少满足一个条件(所有集合并集大小)
恰好满足所有条件(所有集合交集大小)
然而,我们能求的是:
至少满足某 k k 个条件 (某 k k 个集合交集大小)
我们运用上面的公式转化一下就可以了。
先考虑颜色。“每种颜色在棋盘上至少出现一次”就是“每种颜色都要出现”。
套二项式反演:
g A ( c ) = c ∑ i = 0 ( − 1 ) c − i ( c i ) f A ( i ) g A ( c ) = ∑ i = 0 c ( − 1 ) c − i ( c i ) f A ( i )
对于行,我们可以强制它满足限制。也就是在计算列的时候,把方案数减一。
考虑列。
套二项式反演:
g B ( m ) = m ∑ i = 0 ( − 1 ) m − i ( m i ) f B ( i ) g B ( m ) = ∑ i = 0 m ( − 1 ) m − i ( m i ) f B ( i )
f B ( i ) = ( ( k + 1 ) i − 1 ) n f B ( i ) = ( ( k + 1 ) i − 1 ) n
f A ( k ) = g B ( m ) = m ∑ i = 0 ( − 1 ) m − i ( m i ) ( ( k + 1 ) i − 1 ) n f A ( k ) = g B ( m ) = ∑ i = 0 m ( − 1 ) m − i ( m i ) ( ( k + 1 ) i − 1 ) n
再代回就可以了。
推导第二类斯特林数的通项公式#
复习一下,{ m k } { m k } 定义是
m m 个不同的元素划分为 k k 个互不区分的非空集合的方案数。
设数列 g k g k 表示将 m m 个互不相同的元素划分为 k k 个有区别集合的方案数,
f k f k 表示将 m m 个互不相同的元素划分为 k k 个有区别非空集合的方案数。
那么显然,g k = k m g k = k m 。
通过枚举非空集合的个数,可以得知:
g k = k ∑ i = 0 ( k i ) f i g k = ∑ i = 0 k ( k i ) f i
套用二项式反演:
f k = k ∑ i = 0 ( − 1 ) k − i ( k i ) g i f k = ∑ i = 0 k ( − 1 ) k − i ( k i ) g i
由于斯特林数中,集合互不区分,故 { m k } = f k k ! { m k } = f k k !
所以得出结论:
{ m k } = 1 k ! k ∑ i = 0 ( − 1 ) k − i ( k i ) i m { m k } = 1 k ! ∑ i = 0 k ( − 1 ) k − i ( k i ) i m
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具