【组合数学:一】引入 | 排列与组合

  • 本系列,主要是学习《组合数学》(《 I n t r o d u c t o r y   C o m b i n a t o r i c s Introductory\ Combinatorics Introductory Combinatorics》)原书第五版
    精简整理内容

组合数学的引入

  • 组合数学所关心的问题:排列的存在性、排列的列举或分类、研究已知的排列、构造最优排列

棋盘的完美覆盖

  • n × m n\times m n×m 是否能被 1 × b 1\times b 1×b 的骨牌完美覆盖?
    当且仅当 b b b n n n 的因子或者是 m m m 的因子
    b = 2 b=2 b=2 时,方案数有 F i s c h e r Fischer Fischer 公式,包含三角函数

相互重叠的圆

  • 平面上以普通位置相互重叠的 n n n 个圆的划分区域数: h n = n 2 − n + 2 h_n=n^2-n+2 hn=n2n+2
    考虑已有 n − 1 n-1 n1 个圆,划分数为 h n − 1 h_{n-1} hn1
    n n n 个圆与其他 n − 1 n-1 n1 个圆,每个圆都有两个交点,连续的两个交点划分一个圆弧,即多一个区域
    于是 h n = h n − 1 + 2 ( n − 1 ) h_n=h_{n-1}+2(n-1) hn=hn1+2(n1),且容易得到 h 1 = 2 h_1=2 h1=2
    通过反复递推法,可以得到:
    h n = h n − 1 + 2 ( n − 1 ) h n = h n − 2 + 2 ( n − 2 ) + 2 ( n − 1 ) ⋮ h n = h 1 + 2 ( 1 ) + 2 ( 2 ) + ⋯ + 2 ( n − 1 ) \begin{aligned} h_n&=h_{n-1}+2(n-1)\\ h_n&=h_{n-2}+2(n-2)+2(n-1)\\ \vdots\\ h_n&=h_1+2(1)+2(2)+\cdots+2(n-1) \end{aligned} hnhnhn=hn1+2(n1)=hn2+2(n2)+2(n1)=h1+2(1)+2(2)++2(n1)

排列与组合

四个基本的计数原理

  • 加法原理 S 1 , S 2 , ⋯   , S k S_1,S_2,\cdots,S_k S1,S2,,Sk S S S 的一个划分,那么:
    ∣ S ∣ = ∑ i = 1 k ∣ S i ∣ |S|=\sum_{i=1}^k |S_i| S=i=1kSi
  • 乘法原理 S S S 是有序对 ( a , b ) (a,b) (a,b) 的集合, a a a 来自一个大小为 p p p 的集合, b b b 来自一个大小为 q q q 的集合,则:
    ∣ S ∣ = p × q |S|=p\times q S=p×q
  • 减法原理 A A A 是一个集合, U U U A A A 的超集,设 A ˉ = U \ A \bar{A}=U\backslash A Aˉ=U\A ,称 A ˉ \bar{A} Aˉ A A A U U U 中的,则:
    ∣ A ∣ = ∣ U ∣ − ∣ A ˉ ∣ |A|=|U|-|\bar{A}| A=UAˉ
    例子:长度为 6 6 6 的包含 0 ∼ 9 , a ∼ z 0\sim9,a\sim z 09,az 的字符串,有多少种是有重复字符的字符串?
    ∣ U ∣ = 3 6 6 |U|=36^6 U=366
    ∣ A ∣ |A| A 表示有重复字符的字符串的个数; ∣ A ˉ ∣ |\bar{A}| Aˉ 表示没有重复字符的字符串的个数
    则: ∣ A ˉ ∣ = P 36 6 |\bar{A}|=P_{36}^6 Aˉ=P366
    ∣ A ∣ = ∣ U ∣ − ∣ A ˉ ∣ |A|=|U|-|\bar{A}| A=UAˉ,直接得到了
  • 除法原理:令 S S S 是一个有限集合,把它划分成 k k k 个部分使得每一个部分包含的对象数目相同,此划分中的部分的数目:
    k = ∣ S ∣ 在 一 个 部 分 中 的 对 象 数 目 k=\frac{|S|}{在一个部分中的对象数目} k=S
    例子: 740 740 740 只鸽子,每个鸽巢有 5 5 5 只鸽子,那么鸽巢数目为 740 5 = 148 \frac{740}{5}=148 5740=148
  • 多重集合的表示: { 2 ⋅ a , 3 ⋅ b , ∞ ⋅ c } \{2\cdot a,3\cdot b,\infin \cdot c\} {2a,3b,c} 或者使用有序对来指明 { ( 2 , a ) , ( 3 , b ) , ( ∞ , 5 ) } \{(2,a),(3,b),(\infin,5)\} {(2,a),(3,b),(,5)}
  • 计数:优先选择约束性最强的选择
    例子: 0 ∼ 10000 0\sim 10000 010000 之间有多少个整数恰好有一位数字是 5 5 5
    解一:枚举整数的位数,分类讨论,然后加法原理做。
    解二:枚举 5 5 5 的位置,通过添加前导零可以把每个数字都看作是四位数,其他三位方案数是 9 3 9^3 93,于是总的方案数就是: 4 × 9 3 4\times 9^3 4×93

集合的排列

  • P ( n , r ) P(n,r) P(n,r) 表示 n n n 元素集合的 r r r 排列的数目
    P ( n , r ) = n ! ( n − r ) ! P(n,r)=\frac{n!}{(n-r)!} P(n,r)=(nr)!n!
    例子: 26 26 26 个字母排序,元音字母中任意两个都不能连续出现的方案数?
    解:使用插空法。首先排列辅音字母,然后有 22 22 22 个空,选择 5 5 5 个插入元音字母即可,方案数为:
    21 ! × P ( 22 , 5 ) 21!\times P(22,5) 21!×P(22,5)
    上述表述都是线性排列
  • 圆排列 ,即 n n n 元素集合的循环 r r r 排列的数目:
    P ( n , r ) r = n ! r ( n − r ) ! \frac{P(n,r)}{r}=\frac{n!}{r(n-r)!} rP(n,r)=r(nr)!n!
    例子: 10 10 10 个人围一圆桌,其中两个人不愿彼此挨着的方案数?
    解一:用减法原理做,全集方案数就是 9 ! 9! 9!,挨着的方案数就是 2 × 8 ! 2\times 8! 2×8!
    解二:固定 P 1 P_1 P1 为桌头,因为 P 2 P_2 P2 不能和 P 1 P_1 P1 相连,所以 P 1 P_1 P1 左边的人选有 8 8 8 个,右边的人选有 7 7 7 个,其他的 7 7 7 个人就是全排列了,方案数为: 8 × 7 × 7 ! 8\times 7\times 7! 8×7×7!

集合的组合(子集)

  • S S S 的一个组合就是 S S S 的子集的一个选择。
    术语组合和子集本质上可以互换,除非强调选择的过程。
    我们使用 C n r C_n^r Cnr 表示 n n n 元素的 r r r 子集的数目
    当然也可以使用 n C r _nC_r nCr 或者 ( r n ) \Big(_r^n\Big) (rn) 或者
    ( n r ) \begin{pmatrix} n\\r \end{pmatrix} (nr)
    最后一种写法更正式,后文都简记为 C n r C_n^r Cnr
  • 对于 0 ≤ r ≤ n 0\le r\le n 0rn,有
    P n r = r ! C n r C n r = n ! r ! ( n − r ) ! P_n^r=r!C_n^r\\ C_n^r=\frac{n!}{r!(n-r)!} Pnr=r!CnrCnr=r!(nr)!n!
    例子:平面上 25 25 25 个点,没有三点共线,确定多少条直线?确定多少个三角形?
    解:直线个数为 C 25 2 C_{25}^2 C252 ,三角形个数为 C 25 3 C_{25}^3 C253
  • 推论:对于 0 ≤ r ≤ n 0\le r\le n 0rn,有
    C n r = C n n − r C_n^r=C_n^{n-r} Cnr=Cnnr
  • 定理(帕斯卡公式): 对于所有满足 1 ≤ k ≤ n − 1 1\le k\le n-1 1kn1的整数 n , k n,k n,k,有
    C n k = C n − 1 k + C n − 1 k − 1 C_n^k=C_{n-1}^k+C_{n-1}^{k-1} Cnk=Cn1k+Cn1k1
    组合推理证明:把有 n n n 个元素的集合 S S S k k k 子集划分成两个集合 A , B A,B A,B,指定其中一个元素为 x x x ,其中 A A A 集合都包含 x x x B B B 集合都不包含 x x x 集合,根据加法原理,有
    C n k = ∣ A ∣ + ∣ B ∣ = C n − 1 k + C n − 1 k − 1 C_n^k=|A|+|B|=C_{n-1}^k+C_{n-1}^{k-1} Cnk=A+B=Cn1k+Cn1k1
  • 定理:对于 n ≥ 0 n\ge 0 n0,有
    ∑ i = 0 n C n i = 2 n \sum_{i=0}^n C_n^i=2^n i=0nCni=2n

多重集合的排列

  • S S S 是一个多重集合,那么 S S S 的一个 r r r 排列是 S S S r r r 个对象的一个有序放置。
  • 定理:设 S S S k k k 种不同类型对象的多重集合,每一个元素都有无限重复数,那么 S S S r r r 排列的数目是 k r k^r kr
  • 定理:设 S S S 是一个多重集合,有 k k k 种不同类型的对象且第 i i i 种类型的有限重复数为 n i n_i ni。设集合的大小为 n = ∑ n i n=\sum n_i n=ni,则 S S S 的排列数目为
    n ! ∏ i = 1 k ( n i ! ) \frac{n!}{\prod_{i=1}^k (n_i!)} i=1k(ni!)n!
    证明:我们先考虑第一种元素的排列,方案数为 C n n 1 C_n^{n_1} Cnn1
    第二种元素的排列的方案数为 C n − n 1 n 2 C_{n-n_1}^{n_2} Cnn1n2
    ⋮ \vdots
    上面的方案数等于
    n ! n 1 ! ( n − n 1 ) ! ⋅ ( n − n 1 ) ! ( n − n 1 − n 2 ) ! ⋅ ( n − n 1 − n 2 ) ! n 3 ! ( n − n 1 − n 2 − n 3 ) ! ⋯ ( n − n 1 − n 2 ⋯ − n k − 1 ) ! n k ! ( n − n 1 − n 2 ⋯ − n k ) ! \frac{n!}{n_1!(n-n_1)!}\cdot \frac{(n-n_1)!}{(n-n_1-n_2)!}\cdot\frac{(n-n_1-n_2)!}{n_3!(n-n_1-n_2-n_3)!}\cdots \frac{(n-n_1-n_2\cdots -n_{k-1})!}{n_k!(n-n_1-n_2\cdots-n_k)!} n1!(nn1)!n!(nn1n2)!(nn1)!n3!(nn1n2n3)!(nn1n2)!nk!(nn1n2nk)!(nn1n2nk1)!
    化简即可得到上述式子。
    第二种解释:令 n = n 1 + n 2 + ⋯ n k n=n_1+n_2+\cdots n_k n=n1+n2+nk ,现在问把 n n n 个球放进 k k k 个不同的盒子,第 i i i 个盒子放 n i n_i ni 个球的方案数。
  • 例子: 8 × 8 8\times8 8×8 的棋盘上放 8 8 8 个非攻击型车的方案数?
    我们记录车的坐标,相当于是 ( 1 , j 1 ) , ( 2 , j 2 ) ⋯ ( 8 , j 8 ) (1,j_1),(2,j_2)\cdots(8,j_8) (1,j1),(2,j2)(8,j8)
    其中 j 1 ∼ j 8 j_1\sim j_8 j1j8 1 ∼ 8 1\sim8 18 的一个全排列
    于是方案数为 8 ! 8! 8!
    前面是假设车之间是没有区别的
  • 例子: n × n n\times n n×n 的棋盘上放 n n n 个非攻击型车,且车有 k k k 种颜色,第 i i i n i n_i ni 种的方案数?
    颜色相当于是一个多重集排列,所以方案数为 n ! n ! ∏ n i n!\frac{n!}{\prod n_i} n!nin!

多重集合的组合

  • S S S 是多重集合, S S S r r r 组合是 S S S 中的 r r r 个对象的无需选择,是一个多重 r r r 子集。我们通常说多重集合的组合而不是多重子集。
  • 定理:设 S S S 是有 k k k 种类型对象的多重集合,每种元素均有无限重复数,那么 S S S r r r 组合的个数等于
    C r + k − 1 r = C r + k − 1 k − 1 C_{r+k-1}^r=C_{r+k-1}^{k-1} Cr+k1r=Cr+k1k1
    证明: S = { ∞ ⋅ a 1 , ∞ ⋅ a 2 , ⋯   , ∞ ⋅ a k } S=\{\infin \cdot a_1,\infin \cdot a_2,\cdots ,\infin \cdot a_k\} S={a1,a2,,ak}
    S S S 的任意 r r r 组合均呈 { x 1 ⋅ a 1 , x 2 ⋅ a 2 , ⋯   , x n ⋅ a k } \{x_1\cdot a_1,x_2\cdot a_2,\cdots, x_n\cdot a_k\} {x1a1,x2a2,,xnak} 的形式
    容易得到 x 1 + x 2 + ⋯ + x k = r x_1+x_2+\cdots+x_k=r x1+x2++xk=r 的非负整数序列 x 1 , x 2 ⋯   , x k x_1,x_2\cdots,x_k x1,x2,xk 对应 S S S 的一个 r r r 组合
    问题就相当于方程
    x 1 + x 2 + ⋯ + x k = r x_1+x_2+\cdots+x_k=r x1+x2++xk=r
    的解的个数,其中 x i x_i xi 是非负整数
    我们使用 隔板法,相当于有 r r r 1 1 1 ,我们使用 k − 1 k-1 k1 个挡板( k − 1 k-1 k1 0 0 0)就可以划分出 k k k 个集合了
    问题就转化为 r r r 1 1 1 k − 1 k-1 k1 0 0 0 的多重集合的排列数,容易得到为 ( r + k − 1 ) ! r ! ( k − 1 ) ! = C r + k − 1 r \frac{(r+k-1)!}{r!(k-1)!}=C_{r+k-1}^r r!(k1)!(r+k1)!=Cr+k1r
  • 例子: 8 8 8 种面包,数量充足,一盒装 12 12 12 个面包的方案数?
    解:相当于是 8 8 8 种类型的多重集合的 12 12 12 组合数,就是
    C 8 + 12 − 1 12 C_{8+12-1}^{12} C8+12112
  • 例子:长度为 r r r,每项为 1 ∼ k 1\sim k 1k 的非递减序列的个数是多少?
    解:相当于在 1 ∼ k 1\sim k 1k 的无限多重集合中选取 r r r 个数字,然后再非递减排序之后得到,就是
    C k + r − 1 r C_{k+r-1}^{r} Ck+r1r
  • 例子: x 1 + x 2 + x 3 + x 4 = 20 x_1+x_2+x_3+x_4=20 x1+x2+x3+x4=20,且满足
    { x 1 ≥ 3 x 2 ≥ 1 x 3 ≥ 0 x 4 ≥ 5 \begin{cases} x_1\ge 3\\ x_2\ge 1\\ x_3\ge 0\\ x_4\ge 5 \end{cases} x13x21x30x45
    的整数解的个数是多少?
    解:我们令 y 1 = x 1 − 3 , y 2 = x 2 − 1 , y 3 = x 2 , y 4 = x 4 − 5 y_1=x_1-3,y_2=x_2-1,y_3=x_2,y_4=x_4-5 y1=x13,y2=x21,y3=x2,y4=x45
    此时方程变为: y 1 + y 2 + y 3 + y 4 = 11 y_1+y_2+y_3+y_4=11 y1+y2+y3+y4=11
    容易得到方案数为 C 4 + 11 − 1 11 C_{4+11-1}^{11} C4+11111
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值