博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『组合数学基础』
阅读量:5144 次
发布时间:2019-06-13

本文共 4265 字,大约阅读时间需要 14 分钟。


基础知识

加法原理

若完成一件事情的方法有\(n\)类,其中第\(i\)类方法包括\(a_i\)种不同的方法,且这些方法互不重合,那么完成这件事共有\(\sum a_i\)中不同的方法。

乘法原理

若完成一件事情需要\(n\)个步骤,其中第\(i\)个步骤有\(a_i\)种不同的完成方法,且这些步骤互不干扰,那么完成这件事共有\(\prod a_i\)中不同的方法。

排列数

\(n\)个不同元素中依次取出\(m\)个元素排成一列(在乎顺序),产生的不同排列的数量为:

\[A_n^m=P_n^m=\frac{n!}{(n-m)!}=n*(n-1)*...*(n-m+1)\]

组合数

\(n\)个不同元素中取出\(m\)个组成一个集合(不在乎顺序),产生的不同集合数量为:

\[C_n^m=\frac{A_n^m}{m!}=\frac{n!}{m!(n-m)!}=\frac{n*(n-1)*...*(n-m+1)}{m*(m-1)*...*1}\]

组合数的性质

\(1.\ C_n^m=C_n^{n-m}\)

证明:

由组合数的定义,对于从\(n\)个元素中取出\(m\)个构成的集合,剩余的元素也恰好构成了一个集合,两个集合一一对应,故产生的集合数量也相同,性质成立。

\(2.\ C_n^m=C_{n-1}^{m}+C_{n-1}^{m-1}\)

证明:

\(n\)个不同元素取出\(m\)个数组成一个集合有两类方法:取\(n\)号元素,不取\(n\)号元素。取\(n\)号元素时,则在\(n-1\)个元素中还取了\(m-1\)个数,有\(C_{n-1}^{m-1}\)种取法。不取\(n\)号元素时,则在\(n-1\)个元素中取了\(m\)个元素,有\(C_{n-1}^m\)种取法,故性质成立。

\(3.\ \sum_{i=0}^nC_n^{i}=2^n\)

证明:

\(n\)个元素中取出若干个元素组成一个集合,有\(n+1\)类方法,即分别取出\(0,1,2,...,n\)个元素,其方案数分别对应\(C_n^1,C_n^2,...,C_n^n\)。从另一方面看,每一个元素有取或不取两种选择,方案数为\(2^n\),所以性质成立。

常见拓展知识

二项式定理

\[(a+b)^n=\sum_{k=0}^nC_n^ka^kb^{n-k}=\sum_{k=0}^nC_n^ka^{n-k}b^{k}\]

证明:

利用数学归纳法,当\(n=1\)时,\((a+b)^1=C_n^0a^0b^1+C_n^1a^1b^0=a+b\)成立。
\(n=p\)时命题成立,则\(n=p+1\)时:
\[ (a+b)^{p+1}=(a+b)^p(a+b)=(a+b)\sum_{k=0}^pC_p^ka^kb^{p-k} \\=a\sum_{k=0}^pC_p^ka^kb^{p-k}+b\sum_{k=0}^pC_p^ka^kb^{p-k} \\=\sum_{k=0}^pC_p^ka^{k+1}b^{p-k}+\sum_{k=0}^pC_p^ka^kb^{p-k+1} \\=\sum_{k=1}^{p+1}C_p^{k-1}a^kb^{p-k+1}+\sum_{k=0}^pC_p^ka^kb^{p-k+1} \\=\sum_{k=0}^{p+1}(C_p^{k-1}+C_p^k)a^kb^{p-k+1} \\=\sum_{k=0}^{p+1}C_{p+1}^ka^kb^{p+1-k} \]
故原命题成立。

多重集排列数

多重集指含有重复元素的广义集合。设多重集\(S=\{n_1*a_1,n_2*a_2,...,n_k*a_k\}\)是由\(n_1\)\(a_1\)\(n_2\)\(a_2\)\(...\)\(n_k\)\(a_k\)组成的集合,则\(S\)的全排列个数为\[\frac{(\sum_{i=1}^k n)!}{\prod_{i=1}^k(n_i!)}\]

证明:

对于朴素全排列,显然有\((\sum_{i=1}^k n)!\)种方案,而在多重集的排列过程中,每个\(a_i\)出现了\(n_i\)次,在这\(n_i\)个位置间各个\(a_i\)可以互相调换位置,有\(n_i!\)中方案,故除去每一个\(n_i\)可以调换位置的重复方案即为总排列数。

多重集的组合数

设多重集\(S=\{n_1*a_1,n_2*a_2,...,n_k*a_k\}\)是由\(n_1\)\(a_1\)\(n_2\)\(a_2\)\(...\)\(n_k\)\(a_k\)组成的集合,对于\(r\leq n_i\ (\forall\ i \in [1,k])\),从\(S\)中取出\(r\)个元素组成一个多重集,产生不同的多重集数量为\[C_{k+r-1}^{k-1}\]

证明:

该问题等价于统计如下集合的数量:\(\{x_1*a_1,x_2*a_2,...,x_k*a_k\}\),其中\(\sum_{i=1}^kx_i=r\)。故原问题等价于多重集\(\{r*0,(k-1)*1\}\)的全排列数,即类似于插板法,每连续的一串\(0\)代表元素\(a_1\)的个数,使用\(k-1\)\(1\)\(r\)\(0\)分成\(k\)部分。利用多重集的排列数公式可得方案数为\(C_{k+r-1}^{k-1}\)

Lucas定理

\(Lucas\)定理:\(p\)为质数时,\(C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ p}*C_{n/p}^{m/p}(mod\ p)\)

证明:

预备和引理

\(1.\)费马小定理:\(p\)为质数时,有\(a\equiv a^p(mod\ p)\)

\(2.\)二项式定理:\((a+b)^n=\sum_{k=0}^nC_n^{k}a^{k}b^{n-k}\)

\(3.\)引理:\(p\)为质数时,有\((1+x)^p\equiv 1+x^p(mod\ p)\)

证明: 由费马小定理可得\((1+x)^p\equiv 1+x(mod\ p)\),又因为\(x\equiv x^p(mod\ p)\),则可得\((1+x)^p\equiv 1+x^p(mod\ p)\)

\(4.\)引理:\((1+x)^n\)\(m\)项的系数即为\(C_n^m\)

证明: 由二项式定理展开可得。

主体证明

对于\((1+n)^p\),分解指数得: \[(1+x)^n\equiv (1+x)^{\lfloor \frac{n}{p} \rfloor p}(1+x)^{n\ mod\ p}(mod\ p)\] 利用引理\(3\),可得: \[(1+x)^n\equiv(1+x^p)^{\lfloor \frac{n}{p} \rfloor}(1+x)^{n\ mod\ p}(mod\ p)\] 二项式定理展开,得: \[(1+x)^n\equiv\sum_{i=0}^{\lfloor \frac{n}{p} \rfloor}C_{\lfloor \frac{n}{p} \rfloor}^ix^{pi}*\sum_{j=0}^{n\ mod\ p}C_{n\ mod\ p}^jx^j\] 当且仅当\(pi+j=m\)时,\(x\)指数为\(m\),故\(i=\lfloor \frac{p}{m} \rfloor,j=p \ mod\ m\)。 而此时\(x^m\)的系数为\[C_{\lfloor \frac{n}{p} \rfloor}^{\lfloor \frac{p}{m} \rfloor}*C_{p\ mod\ n}^{p\ mod\ m}\] 所以\(C_n^m\equiv C_{\lfloor \frac{n}{p} \rfloor}^{\lfloor \frac{p}{m} \rfloor}*C_{p\ mod\ n}^{p\ mod\ m}(mod\ p)\),证毕。

Catalan数列

给定\(n\)\(0\)\(n\)\(1\),将他们排成长度为\(2n\)的序列,满足任意前缀中\(0\)的个数都不少于\(1\)的个数的排列的数量为\[Cat_n=\frac{C_{2n}^n}{n+1}\]

证明:

对于\(n\)\(0\)\(n\)\(1\)任意排成的一个序列\(S\),若\(S\)不满足要求,则必然存在一个最小位置\(2p+1\in[1,2n]\),使得\(S[1,2p+1]\)中存在\(p\)\(0\)\(p+1\)\(1\),那么将\(S[2p+2,2n]\)这一部分取反,就可以得到由\(n-1\)\(0\)\(n+1\)\(1\)排成的序列。

同理,对于一个\(n-1\)\(0\)\(n+1\)\(1\)随意排成的一个序列\(S'\),也必定存在一个最小的位置\(2p'+1\),使得\(S'[1,2p'+1]\)中有\(p'\)\(0\)\(p'+1\)\(1\),那么将\(S'[2p'+2,2n]\)这一部分取反,也能得到由\(n\)\(0\)\(n\)\(1\)排成的一个序列,并且存在前缀\(1\)\(0\)多的位置。

由上可知,每个不符合要求的序列和每一个由\(n-1\)\(0\)\(n+1\)\(1\)排成的序列呈一一对应关系,根据组合数的定义,后者显然有\(C_{n2}^{n-1}\)个,那么符合要求的序列就有

\[C_{2n}^{n}-C_{2n}^{n-1}=\frac{(2n)!}{n!n!}-\frac{(2n)!}{(n+1)!(n-1)!}=\frac{C_{2n}^n}{n+1}=Cat_n\]

\(Catalan\)数还有如下的计算公式:

\[Cat_n=C_{2n}^n-C_{2n}^{n-1}=C_{2n}^n-C_{2n}^{n+1} \\ Cat_n=\sum_{i=0}^{n-1}Cat_iCat_{n-i-1} \\ Cat_n=Cat_{n-1}*\frac{n+1}{4n-2}\]

其他有关\(Catalan\)数,可以看。


转载于:https://www.cnblogs.com/Parsnip/p/10736571.html

你可能感兴趣的文章
Linux-以指定用户运行redis
查看>>
Linux-socket的close和shutdown区别及应用场景
查看>>
xpath
查看>>
parted分区
查看>>
图片标签img
查看>>
JavaScript语言中文参考手册.chm
查看>>
表哥的Access入门++以Excel视角快速学习数据库知识pdf
查看>>
TC 配置插件
查看>>
关于异步reset
查看>>
索引优先队列的工作原理与简易实现
查看>>
并发编程简介
查看>>
基于K-近邻分类算法的手写识别系统
查看>>
使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
查看>>
PC站跳转M站的方法
查看>>
wow 各职业体验(pvp)
查看>>
Streaming的receiver模式
查看>>
[转载]一个人的失败,99%失败于“脾气”
查看>>
【Nowcoder】玩游戏
查看>>
过滤器(Filter)
查看>>
字符串的操作
查看>>