组合数学经常使用的方法主要有计数时的合理分类和组合模型的转换。
加法法则
设事件 A 有 m 种产生方式,事件 B 有 n 种产生方式,则事件 A 或 B 之一有 m + n 种产生方式。 设事件A有m种产生方式, 事件B有n种产生方式,则事件A或B之一 有m+n种产生方式。 设事件A有m种产生方式,事件B有n种产生方式,则事件A或B之一有m+n种产生方式。
[集合论语言]
若 ∣ A ∣ = m , ∣ B ∣ = n , A ∩ B = ∅ ,则 ∣ A ∪ B ∣ = m + n 若|A|=m,|B|=n,A∩B=\emptyset,则|A∪B|=m+n 若∣A∣=m,∣B∣=n,A∩B=∅,则∣A∪B∣=m+n
[例1] 某班选修企业管理的有 18 人,不选
的有 10 人,则该班共有 18 + 10 = 28 人。
[例2] 北京每天直达上海的客车有 5 次,客机有 3 次, 则每天由北京直达上海的旅行方式有 5 + 3 = 8 种。
乘法法则
设事件 A 有 m 种产生式,事件 B 有 n 种产生方式,则事件 A 与 B 有 m ⋅ n 种产生方式。 设事件A有m种产生式,事件B有n种产生方式,则事件A与B有 m · n种产生方式。 设事件A有m种产生式,事件B有n种产生方式,则事件A与B有m⋅n种产生方式。
[集合论语言]
若 ∣ A ∣ = m , ∣ B ∣ = n , A × B = { ( a , b ∣ a ∈ A , b ∈ B ) } ,则 ∣ A × B ∣ = m ⋅ n 若|A|=m,|B|=n,A×B=\{(a,b|a\in A,b\in B)\},则|A×B|=m\cdot n 若∣A∣=m,∣B∣=n,A×B={(a,b∣a∈A,b∈B)},则∣A×B∣=m⋅n
[例1] 某种字符串由两个字符组成,第一个字符可选自{a,b,c,d,e},第二个字符可选自{1,2,3},则这种字符串共有5×3 = 15 个。
[例2] 从A到B有三条道路,从B到C有两条道路,则从A经B到C有3×2=6 条道路。
[例3] 某种样式的运动服的着色由底色和装饰条纹的颜色配成。底色可选红、蓝、橙、黄,条纹色可选黑、白,则共有4×2 = 8种着色方案
这里按照常识解释为,底色和条纹一般不一样,要根据实际要求来解答
[例4.1] 求小于10000的含1的正整数的个数
∵ \because ∵ 小于10000的不含1的正整数可以看作4位数,但0000除外
∴ \therefore ∴ 有 9 × 9 × 9 × 9 − 1 = 6560 9×9×9×9-1=6560 9×9×9×9−1=6560个,
∴ \therefore ∴ 含1的有: 9999 − 6560 = 3439 9999-6560=3439 9999−6560=3439个
[另外],
∵ \because ∵ 全部四位数有 1 0 4 10^4 104个,不含1的四位数有 9 4 9^4 94个
∴ \therefore ∴ 含1的四位数为两个的差: 1 0 4 − 9 4 = 3439 10^4-9^4=3439 104−94=3439个
[例4.2] 求小于10000的含0的正整数的个数
上述方法(含0和含1)对于该题不可直接套用,0019 含1但不含0
∵ \because ∵ 不含0的1位数有 9 9 9个,2位数有 9 2 9^2 92个,3位数有 9 3 9^3 93个,4位数有 9 4 9^4 94个
又 ∵ \because ∵ 不含0小于10000的正整数有
9 + 9 2 + 9 3 + 9 4 = ( 9 5 − 1 ) / ( 9 − 1 ) = 7380 9+9^2+9^3+9^4=(9^5-1)/(9-1)=7380 9+92+93+94=(95−1)/(9−1)=7380个
∴ \therefore ∴ 含0小于10000的正整数有
9999 − 7380 = 2619 9999-7380=2619 9999−7380=2619个
排列
从 n 个不同的元素中,取 r 个不重复的元素,按次序排列,称为从 n 个中取 r 个的无重排列。 排列的全体组成的集合用 P ( n , r ) 表示。排列的个数用 ∣ P ( n , r ) 表示。当 r = n 时称为全排列。 一般不说可重即无重。可重排列的相应记号为 ∣ P ‾ ( n , r ) , P ‾ ( n , r ) 。 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。\\ 排列的全体组成的集合用 P(n,r)表示。排列的个数用|P(n,r)表示。当r=n时称为全排列。\\一般不说可重即无重。可重排列的相应记号为 \overline{|P}(n,r), \overline{P}(n,r)。 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。排列的全体组成的集合用P(n,r)表示。排列的个数用∣P(n,r)表示。当r=n时称为全排列。一般不说可重即无重。可重排列的相应记号为∣P(n,r),P(n,r)。
[典例]
从 n n n个不同的球中,取出 r r r个,放入不同的盒子里,每盒一个。第 1 1 1个盒子有 n n n种选择,第 2 2 2个盒子有 n − 1 n-1 n−1种选择,…,第 r r r个有 n − r + 1 n-r+1 n−r+1种选择。
因此有,
P ( n , r ) = n ( n − 1 ) . . . . . . ( n − r + 1 ) ,有时记 [ n ] r P(n,r)=n(n-1)......(n-r+1),有时记[n]_r P(n,r)=n(n−1)......(n−r+1),有时记[n]r
组合
定义从 n 个不同元素中取 r 个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从 n 个中取 r 个的无重组合。 组合的全体组成的集合用 C ( n , r ) 表示,组合的个数用 C ( n , r ) 表示 对应于可重组合有记号 C ‾ ( n , r ) , C ‾ ( n , r ) 。 定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。\\ 组合的全体组成的集合用C(n,r)表示,组合的个数用C(n,r)表示\\对应于可重组合有记号\overline{C}(n,r),\overline C(n,r)。 定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。组合的全体组成的集合用C(n,r)表示,组合的个数用C(n,r)表示对应于可重组合有记号C(n,r),C(n,r)。
[典例]
若球不同,盒子相同,则是从 n n n个中取出 r r r个的组合模型。若放入盒子后再将盒子标号区别,则又回到排列模型。每一个组合可有 r ! r! r!个标号方案。
因此有,
C ( n , r ) ⋅ r ! = P ( n , r ) C ( n , r ) = P ( n , r ) / r ! = [ n ] r / r ! = ( n r ) = n ! r ! ( n − r ) ! 易见 P ( n , r ) = n r C(n,r)\cdot{r!}=P(n,r)\\ C(n,r)=P(n,r)/r!=[n]_r/r!=(\begin{matrix} n\\r\end{matrix})=\frac{n!}{r!(n-r)!} \\\ 易见\quad P(n,r)=n^r C(n,r)⋅r!=P(n,r)C(n,r)=P(n,r)/r!=[n]r/r!=(nr)=r!(n−r)!n! 易见P(n,r)=nr
[例1] 有5本不同的日文书,7本不同的英文书,10本不同的中文书。
1)取2本不同文字的书;
5 × 7 + 5 × 10 + 7 × 10 = 155 5×7+5×10+7×10=155 5×7+5×10+7×10=155
2)取2本相同文字的书;
C ( 5 , 2 ) + C ( 7 , 2 ) + C ( 10 , 2 ) = 10 + 21 + 45 = 76 C(5,2)+C(7,2)+C(10,2)=10+21+45=76 C(5,2)+C(7,2)+C(10,2)=10+21+45=76
3)任取两本书
155 + 76 = 231 = ( 5 + 7 + 10 2 ) 155+76=231=(\begin{matrix} 5+7+10\\2\end{matrix}) 155+76=231=(5+7+102)
[例2] 从[1,300]中取3个不同的数,使这3个数的和能被3整除,有多少种方案?
[提示:先考虑能被3整除的特点,再考虑三个数的和的特点]
将 [ 1 , 300 ] 分成 3 类: A = { i ∣ i ≡ 1 ( m o d 3 ) } = { 1 , 4 , 7 , . . . , 298 } B = { i ∣ i ≡ 2 ( m o d 3 ) } = { 2 , 5 , 8 , … , 299 } , C = { i ∣ i ≡ 3 ( m o d 3 ) } = { 3 , 6 , 9 , … , 300 } 要满足上述条件,有四种解法: 1 ) 3 个数同属于 A ; 2 ) 3 个数同属于 B 3 ) 3 个数同属于 C ; 4 ) A , B , C 各取一数 . ∴ 共有 3 C ( 100 , 3 ) + 10 0 3 = 485100 + 1000000 = 1485100 将[1,300]分成3类:\\ A=\{i|i≡1(mod3)\}=\{1,4,7,...,298\}\\B=\{i|i≡2(mod 3)\}=\{2,5,8,…,299\},\\C=\{i|i≡3(mod 3)\}=\{3,6,9,…,300\}\\要满足上述条件,有四种解法:\\1)3个数同属于A;\\2)3个数同属于B\\3)3个数同属于C;\\4)A,B,C各取一数.\\ \therefore 共有 3C(100,3)+100^3=485100+1000000=1485100 将[1,300]分成3类:A={i∣i≡1(mod3)}={1,4,7,...,298}B={i∣i≡2(mod3)}={2,5,8,…,299},C={i∣i≡3(mod3)}={3,6,9,…,300}要满足上述条件,有四种解法:1)3个数同属于A;2)3个数同属于B3)3个数同属于C;4)A,B,C各取一数.∴共有3C(100,3)+1003=485100+1000000=1485100
[例3] 某车站有6个入口处,每个入口处每次只能进一人,一组9个人进站的方案有多少?
[建模]
一进站方案表示成: 00011001010100 其中“ 0 ”表示人,“ 1 ”表示门框,其中“ 0 ”是不同元,“ 1 ”是相同元。 给“ 1 ” n 个门只用 n − 1 个门框。任意进站方案可表示成上面 14 个元素的一个排列。 一进站方案表示成:00011001010100\\其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。\\给“1”n个门只用n-1个门框。任意进站方案可表示成上面14个元素的一个排列。 一进站方案表示成:00011001010100其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。给“1”n个门只用n−1个门框。任意进站方案可表示成上面14个元素的一个排列。
[解法1]
在 14 个元的排列中先确定门框“ 1 ”的位置,有 C ( 14 , 5 ) 种选择,再确定人的位置,有 9 ! 种选择, 因此 C ( 14 , 5 ) ⋅ 9 ! 在14个元的排列中先确定门框“1”的位置,有C(14,5)种选择,再确定人的位置,有9!种选择,\\因此C(14,5)\cdot 9! 在14个元的排列中先确定门框“1”的位置,有C(14,5)种选择,再确定人的位置,有9!种选择,因此C(14,5)⋅9!
[解法2]
把全部选择分解成若干步,使每步宜于计算。不妨设 9 个人编成 1 至 9 号。 1 号有 6 种选择; 2 号除可有 1 号的所有选择外,还可(也必须)选择当与 1 号同一门时在 1 号的前面还是后面,故 2 号有 7 种选择; 3 号的选择方法同 2 号,故共有 8 种。 以此类推, 9 号有 14 种选择。 故所求方案为 [ 14 ] 9 把全部选择分解成若干步,使每步宜于计算。不妨设9个人编成1至9号。\\1号有6种选择;\\2号除可有1号的所有选择外,还可(也必须)选择当与1号同一门时在1号的前面还是后面,故2号有7种选择;\\3号的选择方法同2号,故共有8种。\\以此类推,9号有14种选择。\\故所求方案为[14]_9 把全部选择分解成若干步,使每步宜于计算。不妨设9个人编成1至9号。1号有6种选择;2号除可有1号的所有选择外,还可(也必须)选择当与1号同一门时在1号的前面还是后面,故2号有7种选择;3号的选择方法同2号,故共有8种。以此类推,9号有14种选择。故所求方案为[14]9
[例1] 简单格路问题 ∣ ( 0 , 0 ) → ( m , n ) ∣ = ( m + n n ) |(0,0)\rightarrow(m,n)|=(\begin{matrix} m+n\\n\end{matrix}) ∣(0,0)→(m,n)∣=(m+nn)。从 (0,0)点出发沿x轴或y轴的正方向每步走一个单位,最终走到(m,n)点,有多少条路径?
[建模]
[例2] 在例1的基础上若设 m < n m
[例3] 在100名选手之间进行淘汰赛(即一场的比赛结果,失败者退出比赛),最后产生一名冠军,问要举行几场比赛?
[例4] CnH2n+2是碳氢化合物,随着n的不同有下列不同的枝链:
这说明对应CnH2n+2的枝链是有3n+2个顶点的一棵树,其中n个顶点与之关联的边数为4;其它2n+2个顶点是叶子。对于这样结构的每一棵树,就对应有一种特定的化合物。从而可以通过研究具有上述性质的树找到不同的碳氢化合物CnH2n+2
Cayley定理 n个有标号的顶点的树的数目等于nn-2 。
生长点不是叶子,每个生长点是[1,n]中的任一元有n种选择。两个顶点的树是唯一的。
[证明]
由一棵 n 个顶点的树可得到一个长度为 n - 2 的序列 ∗ ,且不同的树对应的序列不同,因此 ∣ T ∣ ≤ n n − 2 。 对 n 用归纳法可证 反之,由一个长度为 n - 2 的序列 ( 每个元素为 1 n 的一个整数 ) ,可得到一棵树,且不同的序列对应的树是不同的,因此 n n − 2 ≤ ∣ T ∣ ∣ T ∣ = n n − 2 由一棵n个顶点的树可得到一个长度为n-2的序列* ,且不同的树对应的序列不同,因此 | T |≤ n^{n-2}。\\对n用归纳法可证\\反之,由一个长度为n-2的序列(每个元素为1~ n 的一个整数),可得到一棵树,且不同的序列对应的树是不同的,因此 \\ n^{n-2} ≤| T |\\| T | = n^{n-2} 由一棵n个顶点的树可得到一个长度为n-2的序列∗,且不同的树对应的序列不同,因此∣T∣≤nn−2。对n用归纳法可证反之,由一个长度为n-2的序列(每个元素为1 n的一个整数),可得到一棵树,且不同的序列对应的树是不同的,因此nn−2≤∣T∣∣T∣=nn−2
[例5] 给定一棵有标号的树
边上的标号表示摘去叶的顺序。(摘去一个叶子相应去掉一条边)
由树形成序列
3
1
5
5
1
31551
,长度为7-2 = 5这是由树形成序列的过程。由序列形成树
31551
得到一个新序列11123345556731551
排序得到11355
31551
的长度为5,得到按升序排序的序列1234567,序列的长度为5+2(即n+2)
算法描述
给定序列 b = ( b 1 b 2 … b n − 2 ) b=(b_1b_2…b_{n-2}) b=(b1b2…bn−2),设 a = ( 123 … n − 1 n ) a=(123…n-1\quad n) a=(123…n−1n)将b的各位插入 a a a,得 a ′ a' a′,对 ( b a ′ ) (\begin{matrix} b\\a'\end{matrix}) (ba′)做操作。
[ a ′ a' a′是 2 n − 2 2n-2 2n−2个元的可重非减序列。]
操作是从 a ′ a' a′中去掉最小无重元,设为a1,再从b和a’中各去掉一个b中的第一个元素,设为b1,则无序对 ( a 1 , b 1 ) (a_1,b_1) (a1,b1)是一条边。重复这一操作,得n-2条边,最后 a ′ a' a′中还剩一条边,共 n-1条边,正好构成一个树。b中每去掉一个元, a ′ a' a′中去掉2个元。
全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。
对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后。
[例1] 字符集 1 , 2 , 3 {1,2,3} 1,2,3,较小的数字较先,这样按字典序生成的全排列是:
123,132,213,231,312,321。
※※ 一个全排列可看做一个字符串,字符串可有前缀、后缀。
生成给定全排列的下一个排列
生成给定全排列的下一个排列
所谓一个的下一个就是这一个与下一个之间没有其他的。这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。
[例2] 839647521
是1–9的排列。1—9的排列最前面的是123456789
,最后面的是987654321
,从右向左扫描若都是增的,就到了987654321
,也就没有下一个了。否则找出第一次出现下降的位置。
[例3] 求 8396 8396 83964 7521 7521 7521 的下一个排列
7 5 2 1
1.在后缀7521
中找出比4
大的数7 5
2.找出其中比4
大的最小数5
3.4、5
对换
8396 8396 83965 7 7 74 21 21 21
4.将此后缀``7421翻转,接上前缀83965
得到 [例3] 要求的下一个排列
8396 8396 83965 1247 1247 1247
在 [ 1 , n ] 的全排列中 , n n − 1...3 2 1 是最后一个排列,其中介数是 ( n − 1 , n − 2 , . . . , 3 , 2 , 1 ) 其序号为 ∑ k = 1 n − 1 k × k ! 另一方面可直接看出其序号为 n ! − 1 于是 n ! − 1 = ∑ k = 1 n − 1 k × k ! 即 n ! = ∑ k = 1 n − 1 k × k ! + 1 在[1,n]的全排列中,n\quad n-1 ...3\quad2\quad1是最后一个排列,其中介数是(n-1,n-2,...,3,2,1)其序号为\sum_{k=1}^{n-1}{k×k!}\\另一方面可直接看出其序号为n!-1\\于是n!-1=\sum_{k=1}^{n-1}{k×k!}即n!=\sum_{k=1}^{n-1}{k×k!}+1 在[1,n]的全排列中,nn−1...321是最后一个排列,其中介数是(n−1,n−2,...,3,2,1)其序号为∑k=1n−1k×k!另一方面可直接看出其序号为n!−1于是n!−1=∑k=1n−1k×k!即n!=∑k=1n−1k×k!+1
一般而言,设 P 是 [ 1 , n ] 的一个全排列。 P = P 1 P 2 . . . P n = P 1 P 2 . . . P j P j + 1 . . . P k − 1 P k P k + 1 . . . P n j = m a x { i ∣ P i < P i + 1 } , k = m a x { i ∣ P i > P j } 对换 P j , P k , 将 P j + 1 . . . P k − 1 P j P k + 1 . . . P n 翻转 P ′ = P 1 P 2 . . . P j − 1 P k P n . . . P k + 1 P j P k − 1 . . . P j + 1 即 P 的下一个 一般而言,设P是[1,n]的一个全排列。\\P=P_1P_2...P_n=P_1P_2...P_jP_{j+1}...P_{k-1}P_kP_{k+1}...P_n\\j=max\{i|P_i
计算给定排列的序号
839647521
的序号即先于此排列的排列的个数。
将先于此排列的排列按前缀分类。
前缀先于8的排列的个数: 7 × 8 ! 7×8! 7×8!
第1位是8,先于83的排列的个数: 2 × 7 ! 2×7! 2×7!
前2位是83,先于839的排列的个数: 6 × 6 ! 6×6! 6×6!
前3位是839的,先于8396的排列个数: 4 × 5 ! 4×5! 4×5!
前4位是8396,先于83964的的排列个数: 2 × 4 ! 2×4! 2×4!
前5位是83964的,先于839647的排列个数: 3 × 3 ! 3×3! 3×3!
前6位是839647,先于8396475的排列个数: 2 × 2 ! 2×2! 2×2!
前7位是8396475,先于83964752的排列的个数: 1 × 1 ! 1×1! 1×1!
前8位固定,则最后一位也随之固定。
先于此排列的排列的个数:
7 × 8 ! + 2 × 7 ! + 6 × 6 ! + 4 × 5 ! + 2 × 4 ! + 3 × 3 ! + 2 × 2 ! + 1 × 1 ! = 297191 7×8!+2×7!+6×6!+4×5!+2×4!+3×3!+2×2!+1×1!=297191 7×8!+2×7!+6×6!+4×5!+2×4!+3×3!+2×2!+1×1!=297191
将 8 ! , 7 ! , . . . , 1 ! 8!,7!,...,1! 8!,7!,...,1!前面的系数抽出,放在一起得到72642321
该数是计算排列839647521
的序号的中间环节,称之为中介数
一般而言 , 对于 [ 1 , 9 ] 的全排列中介数首位的取值为 0 — 8 ,第 2 位的取值为 0 — 7 ,以此类推,第 8 位的取值为 0 、 1 。从而序号可表示为: ∑ i = 1 n − 1 k i ( n − i ) k i : P i 的右边比 P i 小的数的个数 i = 1 , 2 , … , n − 1 一般而言,对于[1,9]的全排列中介数首位的取值为0—8,第2位的取值为0—7,以此类推,第8位的取值为0、1。从而序号可表示为:\\ \sum{i=1}^{n-1}{k_i(n-i)}\\k_i:P_i的右边比P_i小的数的个数\\i=1,2,…,n-1 一般而言,对于[1,9]的全排列中介数首位的取值为0—8,第2位的取值为0—7,以此类推,第8位的取值为0、1。从而序号可表示为:∑i=1n−1ki(n−i)ki:Pi的右边比Pi小的数的个数i=1,2,…,n−1
由中介数推出排列的算法
[例] 由72642321推出839647521
[方法1]
P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9 P_1\quad P_2\quad P_3\quad P_4\quad P_5\quad P_6\quad P_7\quad P_8 \quad P_9 P1P2P3P4P5P6P7P8P9
7 + 1 = 8 → P 1 = 8 2 + 1 = 3 → P 2 = 3 6 + 1 = 7 , 但 3 已在 P 3 左边出现, 7 + 1 = 8 , 但 8 已在 P 3 左边出现, 8 + 1 = 9 → P 3 = 9 4 + 1 = 5 , 但 3 已在 P 4 左边出现 , 5 + 1 = 6 → P 4 = 6 2 + 1 = 3 , 但 3 已在 P 5 左边出现 , 3 + 1 = 4 → P 5 = 4 3 + 1 = 4 ,但 3 , 4 已在 P 6 左边出现 , 4 + 1 + 1 = 6 , 但 6 已在 P 6 左边出现 , 6 + 1 = 7 → P 6 = 7 2 + 1 = 3 , 但 3 已在 P 7 左边出现 , 3 + 1 = 4 , 但 4 已在 P 7 左边出现 , 4 + 1 = 5 → P 7 = 5 1 + 1 = 2 → P 8 = 2 → P 9 = 1 7+1=8\rightarrow P_1=8\\2+1=3\rightarrow P_2=3\\6+1=7,但3已在P_3左边出现,\\7+1=8,但8已在P_3左边出现,\\8+1=9\rightarrow P_3=9\\4+1=5,但3已在P_4左边出现,\\5+1=6\rightarrow P_4=6\\2+1=3,但3已在P_5左边出现,\\3+1=4\rightarrow P_5=4\\3+1=4,但3,4已在P_6左边出现,\\4+1+1=6,但6已在P_6左边出现,\\6+1=7\rightarrow P_6=7\\2+1=3,但3已在P_7左边出现,\\3+1=4,但4已在P_7左边出现,\\4+1=5\rightarrow P_7=5\\1+1=2\rightarrow P_8=2\\\rightarrow P_9=1 7+1=8→P1=82+1=3→P2=36+1=7,但3已在P3左边出现,7+1=8,但8已在P3左边出现,8+1=9→P3=94+1=5,但3已在P4左边出现,5+1=6→P4=62+1=3,但3已在P5左边出现,3+1=4→P5=43+1=4,但3,4已在P6左边出现,4+1+1=6,但6已在P6左边出现,6+1=7→P6=72+1=3,但3已在P7左边出现,3+1=4,但4已在P7左边出现,4+1=5→P7=51+1=2→P8=2→P9=1
[方法2]
72642321中未出现 0 , 1 0,1 0,1在最右边
中介数右端加一个 0 0 0扩成 9 9 9位,先定 1 1 1,每定一位,其左边未定位下加一点,从(位-位下点数=0)的位中选最左的。
定1的位置
定2的位置
定3的位置
定4的位置
定5的位置
定6的位置
定7的位置
定8的位置
定9的位置
[引例] 假定这个数列是 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , … . , 2, 3, 5, 7, 11, 13, 17, 19, 23, …., 2,3,5,7,11,13,17,19,23,…., 此处 a n a_n an是第 n n n个素数. 这样的情况, 期望任何简单的公式都是不合理的。
母函数把数列的所有成员用一种非常巧妙的方法联系在一起, 虽然这样做并不一定能得到数列的简单公式, 可是也许能够给出一个幂级数和的简单公式, 展开这个和函数, 所得到的幂级数的系数就是我们所要找的数列。
(式3.1)
中发现, 所有这些可能的选取方式正好是 x x x幂的系数. 其中 x i x^i xi的系数是从三个球中选取 i 个 i个 i个的方法之形象表示a
, 有两种选取方法: 不选a
, 或选a
。 因子 ( 1 + a x ) (1+ax) (1+ax)中的 1 1 1表示不选a
, 而 x x x的系数a
表示选a
.i
个球的方法, 那么a
, b
,c
三球, 选取的方法是, “选a
或不选a
”和“选b
或不选b
”以及“选c
或不选c
”。(3.1)式
中令 a = b = c = 1 a=b=c=1 a=b=c=1, 则得到[定义3.1] 利用给定序列 a 0 , a 1 , a 2 , , . . . 所构造的函数 利用给定序列a_0,a_1,a2,,...所构造的函数 利用给定序列a0,a1,a2,,...所构造的函数 F ( x ) = a 0 + a 1 x + a 2 x 2 + . . . F(x)=a_0+a_1x+a_2x^2+... F(x)=a0+a1x+a2x2+...
称之为序列 a 0 , a 1 , a 2 , . . . 的母函数 称之为序列a_0,a_1,a_2,...的母函数 称之为序列a0,a1,a2,...的母函数
母函数定义中的级数是形式幂级数, 不必关心收敛性, x x x只是一个形式变量.
常用公式
[例1] 设 F ( x ) = 1 + x + x 2 + . . . , G ( x ) = 1 − x , 由定义可以得到 F ( x ) G ( x ) = 1 , 因此 1 G ( x ) = G − 1 ( x ) = F ( x ) , 即 设F(x)= 1+x+x^2+..., G(x)=1-x, 由定义可以得到 F(x)G(x)=1,因此\frac{1}{G(x)}= G^{-1}(x)=F(x), 即 设F(x)=1+x+x2+...,G(x)=1−x,由定义可以得到F(x)G(x)=1,因此G(x)1=G−1(x)=F(x),即
1 1 − x = 1 + x + x 2 + . . . \frac{1}{1-x}=1+x+x^2+... 1−x1=1+x+x2+...
[例1] 丢掷四颗骰子,求出现的点数和为 15 15 15的丢掷结果的种数
[例2] 有 1 1 1分、 2 2 2分、 4 4 4分,…, 2 p 2p 2p分的硬币,问一张n分的纸币兑换硬币,有几种兑换方法?
[例3] r r r个没有区别的球,分放到 n n n个不同的盒子,求分放种数 a r a_r ar
[例4] r r r个没有区别的球,分放到 n n n个不同的盒子,要求每盒不空,求分放种数 a r a_r ar. 其中 r ≥ n r≥n r≥n。
[例1] (Hanoi塔问题): n n n个圆盘依其半径大小, 从下而上套在柱 A A A上, 如图所示. 每次只允许取一个转移到柱 B B B或 C C C上, 而且不允许大盘放在小盘上方. 若要求把 A A A上的 n n n个盘转移到 C C C柱上. 请设计一种方法, 并估计要移动几个盘次. 现在只有 A , B , C A, B, C A,B,C三根柱子可供使用。
算法设计
[示例]
[设计]
[对于n=3的情况下,n=2答案重复使用了两次]
算法分析
令 h n h_n hn表示 n n n个圆盘所需要的转移次数. 根据算法先把前面 n − 1 n-1 n−1个盘子转移到B上; 然后把第 n n n个盘子转移到C上; 最后再一次将B上的 n − 1 n-1 n−1个盘子转到C上.
[方法1] 归纳法
计算这个数列前几项:
1 , 3 , 7 , 15 , 31 , … 1, 3, 7, 15, 31, … 1,3,7,15,31,…
看起来有点象
h n = 2 n − 1 , n = 1 , 2 , … h_n=2^n-1, n=1,2,… hn=2n−1,n=1,2,…
根据递归关系(3.3)用归纳法即可证之.
[方法2] 母函数法
令 H ( x ) = h 1 x + h 2 x 2 + h 3 x 3 + . . . H(x)=h_1x+h_2x^2+h_3x^3+... H(x)=h1x+h2x2+h3x3+...
根据左右相等得到
( 1 − 2 x ) H ( X ) = x 1 − x H ( x ) = x ( 1 − x ) ( 1 − 2 x ) (1-2x)H(X)=\frac{x}{1-x}\\H(x)=\frac{x}{(1-x)(1-2x)} (1−2x)H(X)=1−xxH(x)=(1−x)(1−2x)x
这就是转移次数数列的母函数,但是我们希望得到显示表达式,可以从母函数的幂级数展开式中求出数列 h 1 , h 2 , h 3 , . . . h_1,h_2,h_3,... h1,h2,h3,...
采用部分分数的算法
[例2] 几个人在一起,使得其中存在相同生日的概率至少为1/2.
设 P m P_m Pm为 m m m个人在一起没有相同生日的概率,则
[例3] 从 n n n个元素 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an中取 r r r个进行允许重复的组合. 假定允许重复的组合数用 C ∗ ( n , r ) C^*(n,r) C∗(n,r)表示.
n-1
位十进制数,
[例5] Fibonacci
问题提出
假定初生的一对雌雄兔子, 从出生的第2个月之后每个月都可以生出另外一对雌雄兔. 如果第1个月只有一对初生的雌雄兔子, 问n个月之后共有多少对兔子?
递推关系
设满 n n n个月时兔子对数为 F n F_n Fn, 其中当月新生兔数目设为 N n N_n Nn对. 第 n − 1 n-1 n−1个月留下的兔子数目设为 Q n Q_n Qn对.
F n = N n + Q n 但 Q n = F n − 1 , N n = Q n − 1 = F n − 2 , 即第 n − 2 个的所有兔子到第 n 个月都有繁殖能力了 ∴ F n = F n − 1 + F n − 2 , F 1 = F 2 = 1 由递推关系可依次得到 F 3 = F 1 + F 2 = 2 , F 4 = F 2 + F 3 = 3 , F 5 = F 3 + F 4 = 3 + 2 = 5 , . . . F_n= N_n+ Q_n\\ 但Q_n= F_{n-1}, N_n= Q_{n-1}= F_{n-2}, 即第n-2个 的所有兔子到第n个月都有繁殖能力了 \therefore F_n= F_{n-1}+ F_{n-2}, F_1 =F_2=1 \\ 由递推关系可依次得到\\ F_3= F_1+F_2=2, F_4= F_2+F_3=3, F_5= F_3+ F_4=3+2=5,... Fn=Nn+Qn但Qn=Fn−1,Nn=Qn−1=Fn−2,即第n−2个的所有兔子到第n个月都有繁殖能力了∴Fn=Fn−1+Fn−2,F1=F2=1由递推关系可依次得到F3=F1+F2=2,F4=F2+F3=3,F5=F3+F4=3+2=5,...
解递推关系
设母函数表达式 G ( x ) = F 1 x + F 2 x 2 + . . . G(x)=F_1x+F_2x^2+... G(x)=F1x+F2x2+...,将上述递推公式带入母函数表达式
德.摩根定理: 设 A , B 为全集 U 的任意两个子集,则 设A,B为全集U的任意两个子集,则 设A,B为全集U的任意两个子集,则
( a ) A ∪ B ‾ = A ‾ ∩ B ‾ ( b ) A ∩ B ‾ = A ‾ ∪ B ‾ (a) \overline{A∪B}=\overline{A}∩\overline{B}\quad(b) \overline{A∩B}=\overline{A}∪\overline{B} (a)A∪B=A∩B(b)A∩B=A∪B
定理推广: 设 A 1 , A 2 , . . . , A n 为 U 的子集,则 设A_1,A_2,...,A_n为U的子集,则 设A1,A2,...,An为U的子集,则
( a ) A 1 ∪ A 2 ∪ . . . A n ‾ = A 1 ‾ ∩ A 2 ‾ . . . ∩ A n ‾ ( b ) A 1 ∩ A 2 ∩ . . . A n ‾ = A 1 ‾ ∪ A 2 ‾ . . . ∪ A n ‾ (a) \overline{A_1∪A_2∪...A_n}=\overline{A_1}∩\overline{A_2}...∩\overline{A_n}\\ (b)\overline{A_1∩A_2∩...A_n}=\overline{A_1}∪\overline{A_2}...∪\overline{A_n} (a)A1∪A2∪...An=A1∩A2...∩An(b)A1∩A2∩...An=A1∪A2...∪An
两个集合的容斥原理
设 A 和 B 分别具有性质 P 1 和性质 P 2 的元素的集合,则 设A和B分别具有性质P_1和性质P_2的元素的集合,则 设A和B分别具有性质P1和性质P2的元素的集合,则
∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ |A∪B|=|A|+|B|-|A∩B| ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
[例] 求1到500之间能被5或7整除的正整数个数.
设A为被5整除的整数集合, B为被7整除的整数集合, 用 [ x ] [x] [x]表示 x x x的整数部分, 则有
三个集合的容斥原理
设 A , B , C 为任意三个集合,则有 设A,B,C为任意三个集合,则有 设A,B,C为任意三个集合,则有
∣ A ∪ B ∪ C ∣ = ∣ A ∣ + ∣ B ∣ + ∣ C ∣ − ∣ A ∩ B ∣ − ∣ A ∩ C ∣ − ∣ B ∩ C ∣ + ∣ A ∩ B ∩ C ∣ |A∪B∪C|=|A|+|B|+|C|-|A∩B|-|A∩C|-|B∩C|+|A∩B∩C| ∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
n个集合的容斥原理
设 A 1 , A 2 , . . . , A n 是有限集合,则有 设A_1,A_2,...,A_n是有限集合,则有 设A1,A2,...,An是有限集合,则有
∣ A 1 ∪ A 2 ∪ . . . A n ∣ = ∑ i = 1 n ∣ A i ∣ − ∑ i = 1 n ∑ j > i ∣ A i ∩ A j ∣ + ∑ i = 1 n ∑ j > i ∑ k > j ∣ A i ∩ A j ∩ A k ∣ − . . . + ( − 1 ) n − 1 ∣ A 1 ∩ . . . ∩ A n ∣ |A_1∪A_2∪...A_n|=\sum_{i=1}^{n}|A_i|-\sum_{i=1}^{n}\sum_{j>i}{|A_i∩A_j|}\\+\sum_{i=1}^{n}\sum_{j>i}\sum_{k>j}{|A_i∩A_j∩A_k|}-...+(-1)^{n-1}|A_1∩...∩A_n| ∣A1∪A2∪...An∣=i=1∑n∣Ai∣−i=1∑nj>i∑∣Ai∩Aj∣+i=1∑nj>i∑k>j∑∣Ai∩Aj∩Ak∣−...+(−1)n−1∣A1∩...∩An∣
容斥原理的余集形式
[例1] 求在1
到10000
的整数中不能被4,5,6中任何一个整除的整数的个数.
[例2] n n n个不同的球分放 m m m个不同的盒子里,每盒不空,求分放总数 f ( n , m ) f(n,m) f(n,m).
设无约束条件(空)的方法,是因为题目要求不空,采用容斥原理,改写成余集形式