组合数学 04 - 基本计数问题
Posted 万物皆数
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合数学 04 - 基本计数问题相关的知识,希望对你有一定的参考价值。
1. 基本计数
1.1 统一模型
本篇来讨论几个基本的计数问题,这些问题虽然都有各自的模型,但本质上却有着内在的联系,因此我们先建立一个统一的模型。现在有元素集\\(E,F\\),它们的元素都有内在的结构,建立映射\\(E\\to F\\),问题是这样的映射有多少个?满射和单射有多少个?
所谓有内在的结构,就是元素间的拓扑结构,我们所说的映射个数,严格讲是在拓扑同构意义下的等价类的个数。拓扑结构种类繁多,无法一一研究,本篇只探讨两个基本的拓扑结构,下一篇会做更一般性的讨论。这个模型虽然对本章作用有限,但可以从更高的视角思考看待问题的本质,而且各个问题间联系也一目了然。
两个基本拓扑结构分别是:无序结构和有向链表。无序结构中的元素是离散的、无差别的,在拓扑同构下可以互相替换。有向链表中的元素是完全区分的,它的拓扑同构只有自身,当然只有自身的拓扑结构不止这一个,这里只要强调完全区分性,所谓有向链表可以当做是给每个元素编了号。以下设\\(E,F\\)都是有限集,且记\\(|E|=m,|F|=n\\)。
1.2 模型1:可区分\\(\\to\\)可区分
可完全区分的结构比较简单,先来看\\(E,F\\)都是有向链表的情况,\\(E,F\\)分别纵向排列,\\(E\\to F\\)就是一般的函数定义。对\\(E\\)的每个元素都有\\(n\\)个值可以映射,由乘法原理便知映射一共有\\(n^m\\)种。这个结构有一个更常用、更直观的模型,考察由\\(n\\)个字母组成的集合\\(S\\),用这些字母组成长度为\\(m\\)的单词\\(x_1x_2\\cdots x_m\\)。这个单词也被称\\(S\\)上的\\(m\\)元可重复排列,或\\(m\\)元字。不难证明它和模型1的等价性,故\\(S\\)上的\\(m\\)元字有\\(n^m\\)个。
现在对映射添加一些限制,比如假设\\(E\\)的第\\(k\\)个元只能取某\\(n_k\\)个值,由乘法定理知可以有\\(n_1n_2\\cdots n_m\\)个\\(m\\)元字。再限制每个元素的映射不能相同,或者说字中没有重复字母,第\\(k\\)个元素只能取\\(n-k+1\\)个值。这其实就是我们熟悉的\\(n\\)个元素中选\\(m\\)个元素的排列数\\(P(n,m)\\)(式(1)),其中表达式\\(x(x-1)\\cdots(x-k+1)\\)简记为\\((x)_k\\),也叫做\\(x\\)的降\\(k\\)阶乘(\\(x\\)不要求是自然数)。类似地记表达式\\(x(x+1)\\cdots(x+k-1)\\)简记为\\((x)^k\\),也叫做\\(x\\)的升\\(k\\)阶乘。
\\[P(n,m)=(n)_m=n(n-1)\\cdots(n-m+1)=\\dfrac{n!}{(n-m)!}\\tag{1}\\]
排列数要求每个函数值最多被映射一次,继续推广,我们假定\\(F\\)中第\\(k\\)个数被映射\\(m_k\\)次。这样的字称为是\\(a_1^{m_1}a_2^{m_2}\\cdots a_n^{m_n}\\)型字,其中\\(m_1+m_2+\\cdots+m_n=m\\)。先将\\(m_k\\)个字母\\(a_k\\)看成互异的字母\\(a_{k1},\\cdots,a_{km_k}\\),这样的字有\\(m!\\)个,而原来的每个字对应到\\(m_1!m_2!\\cdots m_n!\\)个这样的字,故有式(2)成立。
\\[N(a_1^{m_1}a_2^{m_2}\\cdots a_n^{m_n})=\\dfrac{m!}{m_1!m_2!\\cdots m_n!}\\tag{2}\\]
• 求\\(S\\)上的相邻字母不相同的\\(m\\)元字的个数。
1.3 模型2:不可区分\\(\\to\\)可区分
现在假定\\(E\\)是无序的,而\\(F\\)是有向链表,由于原像不可区分,要关注的便是像的组合情况。它的一个等价模型我们也很熟悉:从\\(n\\)种颜色的球里选出\\(m\\)个球。如果要求每种颜色只能选一个,相当于映射为单射,选取个数称为\\(n\\)的\\(m\\)元不重复组合数,记作\\(\\binom{n}{m}\\),一般也简称为组合数。它其实就是排列在\\(E\\)无序下的等价类的个数,具体说就是\\(m!\\)个排列属于同一个等价类,故有公式(3)。
\\[\\binom{n}{m}=\\dfrac{(n)_m}{m!}=\\dfrac{n!}{m!(n-m)!}\\tag{3}\\]
如果颜色可以重复选,选取个数称为\\(n\\)的\\(m\\)元可重复组合数,记作\\(\\left(\\binom{n}{m}\\right)\\)。设每个像被映射的次数为\\(x_k\\),可重复组合数等价于方程(4)的非负整数解的个数。对这个问题,有两个比较巧妙的方法,它们都把可重复组合问题转化为了不重复组合问题,其中的对应思想是非常重要的。一种方法是直接理解方程(4),它相当于把\\(m\\)个相同的元素分割为可区分的\\(n\\)份。将\\(m\\)个元素一字排开,在其中插入\\(n-1\\)个隔板即可,隔板和元素共\\(m+n-1\\)个位子,我们就是要选择其中的\\(n-1\\)个位置,这就有式(5)成立。
\\[x_1+x_2+\\cdots+x_n=m\\tag{4}\\]
\\[\\left(\\binom{n}{m}\\right)=\\binom{m+n-1}{m}=\\dfrac{(n)^m}{m!}\\tag{5}\\]
另一种解释式(4)的方法也非常经典,考察\\(s_k=x_1+\\cdots+x_k\\)组成的单调递增序列(式(6)左),\\(s_k\\)在\\([n]\\)中取值,但可能存在重复值。为了消除等号,再令\\(t_k=s_k+k-1\\),这时有式(6)成立,其中\\(t_k\\)在\\([m+n-1]\\)中取互异值,同样得到公式(5)。利用这个思想,更容易得到不等式(7)的非负整数解为\\(\\binom{m+n}{m}\\),它也相当于左式分别取\\(0\\sim m\\)时的解数和,故有式(8)成立。
\\[0\\leqslant s_1\\leqslant\\cdots\\leqslant s_n=m\\;\\Leftrightarrow\\;0\\leqslant t_1<\\cdots<t_n=m+n-1,\\;t_k=s_k+k-1\\tag{6}\\]
\\[x_1+x_2+\\cdots+x_n\\leqslant m\\tag{7}\\]
\\[\\sum_{k=0}^m\\binom{n+k-1}{k}=\\binom{n+m}{m}\\tag{8}\\]
• \\([n]\\)中取\\(m\\)个互不相邻的数,求取法个数。
1.4 模型3:可区分\\(\\to\\)不可区分
像不可区分,就好比\\(n\\)个相同的篮子,把可区分的原像看做是\\(m\\)个不同的球,问题等价于:\\(m\\)个不同的球放进\\(n\\)个篮子的方法。根据有球的篮子数\\(k\\),问题被分为\\(n\\)种情况,每一种情况都是相同的问题:\\(m\\)个球分成\\(k\\)堆的分法。我们就集中研究这个问题,而\\(m\\)个元素分成\\(k\\)部分的个数被称为第二类Stirling数,记作\\(S(m,k)\\)。
Stirling数并没有简单的表达式,我们先从它的递推关系入手,这也是组数计算问题的常用方法。考察某个元素\\(a_1\\),分割后有两种情况:它单独分为一堆,或和其它元素在一堆。所以很容易有递推关系(9)。使用递推关系归纳,可以得到比较漂亮的公式(10),如果你觉得正向证明不明显,可以试试反向证明。
\\[S(m,k)=S(m-1,k-1)+kS(m-1,k)\\tag{9}\\]
\\[S(k+r,k)=\\sum_{1\\leqslant k_1\\leqslant k_2\\leqslant\\cdots\\leqslant k_r\\leqslant k}k_1k_2\\cdots k_r\\tag{10}\\]
考虑模型3和模型1的关系,模型3中的1个分割是模型1中的一个等价类:被映射的像的个数为\\(k\\)。这个等价类中有\\(\\binom{n}{k}k!=(n)_k\\)个元素(先选\\(k\\)个像再排列),从而我们有重要的关系式(11)(\\(S(m,0)=0\\))。\\(m\\)个元素的总分割数被称为Bell数,记作\\(B_m\\),它显然是式(12)左。以某个元素所在堆的大小分类讨论,容易有递推关系式(12)右。
\\[n^m=\\sum_{k=0}^nS(m,k)(n)_k\\tag{11}\\]
\\[B_m=\\sum_{k=0}^mS(m,k)\\;\\Rightarrow\\;B_{m+1}=\\sum_{k=0}^m\\binom{m}{k}B_{m-k}\\tag{12}\\]
1.5 模型4:不可区分\\(\\to\\)不可区分
当原像和像都不可区分时,只需关心分割的堆数和每堆的个数,等价的模型就是整数\\(m\\)的分拆数\\(p(n)\\)。对应地分拆为\\(k\\)部分的个数记作\\(p(m,k)\\),它表示不定方程(13)正整数解的个数,注意它和方程(4)的区别在于不考虑分拆的顺序。既然不考虑各部分的顺序,每个分拆其实还对应方程(14)的一组非负整数解。
\\[x_1+x_2+\\cdots+x_k=m,\\;\\;(x_1\\geqslant x_2\\geqslant\\cdots\\geqslant x_k)\\tag{13}\\]
\\[x_1+2x_2+3x_3+\\cdots+mx_m=m\\tag{14}\\]
分拆数同样没有简单的表达式,我们还是先来建立一些递推关系式。根据\\(x_k\\)是否为\\(1\\)可得到递推关系(15),持续使用该式便得到式(16),它也有显然的组合意义。
\\[p(m,k)=p(m-1,k-1)+p(m-k,k)\\tag{15}\\]
\\[p(k+r,k)=p(r,1)+p(r,2)+\\cdots+p(r,k)\\tag{16}\\]
关于\\(m\\)的某个分拆结果\\(x_1,x_2,\\cdots,x_k\\),有个直观的表示方法,以点表示不可区分的元素,在第\\(i\\)行排列\\(x_i\\)个点。比如\\((5,5,3,2)\\)画成下图,这样的图称为菲勒(Ferrers)示意图,利用其直观性可以得到很多意想不到的结论。菲勒图纵横翻转后仍然是菲勒图,它对应的分拆称为原分拆的共轭分拆,对于分拆\\(\\pi\\),其共轭分拆一般记作\\(\\pi^*\\)。从菲勒图中容易得到:(1)\\(p(m,k)\\)等于\\(m\\)最大分部为\\(k\\)的分拆数;(2)\\(m\\)最多\\(k\\)个部分的分拆数,等于\\(m\\)最大分部不大于\\(k\\)的分拆数。
满足\\(\\pi=\\pi^*\\)的分拆称为自共轭分拆,它的菲勒图沿对角线对称。将其菲勒图按如图所示分割,便知\\(m\\)的自共轭分拆数等于各部分是不同奇数的分拆数。再看各部分都不同的分拆,每个部分\\(x_k\\)都可以唯一地表示为\\(i\\cdot 2^j\\),其中\\(i\\)为奇数。把该部分拆分为\\(2^j\\)个\\(i\\),最终得到所有部分为奇数的分拆。反之对各部分为奇数的分拆,因为大小为\\(i\\)的部分的个数可以唯一表示为\\(2\\)的幂次之和,故这个对应关系是双向的。这就是说,各部分不相等的分拆数等于各部分为奇数的分拆数。
2. 基本计数的性质
2.1 二项式系数
前面我们已经讨论过,组合数\\(\\binom{n}{m}\\)是\\((1+x)^n\\)展开式中\\(x^m\\)项的系数,当然也二项式(17)中\\(x^my^{n-m}\\)项的系数,故它也称为二项式系数。组合数的定义式(3)中,\\(\\dfrac{n!}{m!(n-m)!}\\)要求\\(m,n\\)都是非负整数,但\\(\\dfrac{(n)_m}{m!}\\)中\\(n\\)可以为任何实数,以后形式\\(\\binom{x}{m}\\)也可以用来表示多项式\\(\\dfrac{(x)_m}{m!}\\)。这个推广其实是合理的,而在微积分中我们知道\\((1+x)^{\\alpha}\\)的幂级数展开式如式(18)所示(牛顿二项式定理),它正是\\((1+x)^n\\)的推广。另外易知,可重复组合数还可以写成式(19)。
\\[(x+y)^n=\\sum_{k=0}^n\\binom{n}{k}x^ky^{n-k}\\tag{17}\\]
\\[(1+x)^{\\alpha}=1+\\sum_{k=1}^{\\infty}\\binom{\\alpha}{k}x^k\\tag{18}\\]
\\[\\left(\\binom{n}{m}\\right)=(-1)^m\\binom{-n}{m}\\tag{19}\\]
在中学我们就知道一些二项式系数的性质,证明都不难,这里仅仅列举。式(20)中分别是对称性和递推性,其中递推性有显然的组合意义。式(21)是随\\(m\\)的变化体现出来的单峰性。\\((1+x)^n\\)中令\\(x=\\pm 1\\)可得式(22)和(23),另外利用\\((1+x)^m(1+x)^n=(1+x)^{m+n}\\)可得范德蒙恒等式(Vandermonde)(24)。
\\[\\binom{n}{m}=\\binom{n}{n-m};\\;\\;\\binom{n}{m}=\\binom{n-1}{m-1}+\\binom{n-1}{m}\\tag{20}\\]
\\[\\binom{n}{0}<\\binom{n}{1}<\\cdots<\\binom{n}{\\lfloor\\frac{n}{2}\\rfloor}=\\binom{n}{\\lceil\\frac{n}{2}\\rceil}>\\cdots>\\binom{n}{n}\\tag{21}\\]
\\[\\binom{n}{0}+\\binom{n}{1}+\\cdots+\\binom{n}{n}=2^n\\tag{22}\\]
\\[\\binom{n}{0}+\\binom{n}{2}+\\binom{n}{4}+\\cdots=\\binom{n}{1}+\\binom{n}{3}+\\binom{n}{5}+\\cdots=2^{n-1}\\tag{23}\\]
\\[\\sum_{k=0}^r\\binom{m}{k}\\binom{n}{r-k}=\\binom{m+n}{r}\\tag{24}\\]
二项式系数很早就被研究,最著名的当然就是杨辉三角(帕斯卡三角),它正是利用了公式(20)右。在反演公式那一章我们已经知道,矩阵\\(\\{a_{ij}=\\binom{i}{j}\\}\\)的逆矩阵是\\(\\{b_{ij}=(-1)^{i-j}\\binom{i}{j}\\}\\),故有式(25)成立,当然你也可以直接证明它。
\\[\\sum_{k=0}^n(-1)^{k+m}\\binom{n}{k}\\binom{k}{m}=\\delta_{mn}=\\left\\{\\begin{matrix}1,&\\text{if}\\;m=n\\\\0,&\\text{if}\\;m\\ne n\\end{matrix}\\right.\\tag{25}\\]
• 证明:\\(\\sum\\limits_{k=0}^n\\binom{n}{k}^2=\\binom{2n}{n}\\);
• 证明:\\(\\binom{n}{1}+2\\binom{n}{2}+\\cdots+n\\binom{n}{n}=n\\cdot 2^{n-1}\\);
• 写出\\((x_1+x_2+\\cdots+x_p)^n\\)的展开式。
2.2 Stirling数
现在继续讨论第二类Stirling数,从名字就知道它是个有故事的数。公式(10)并不能让人满意,它甚至只是另一个计数问题的描述而已,能使用的就只有公式(11)了。该式显然满足单链\\(L_m\\)的反演公式的形式,把它整理为式(25)左式(为了得到关联函数\\(\\binom{n}{k}\\)),由反演公式得到了式(25)右,从而有\\(S(n,k)\\)的另一个显式表达式(26)。
\\[n^m=\\sum_{k=0}^n\\binom{n}{k}k!S(m,k)\\;\\Leftrightarrow\\;n!S(m,n)=\\sum_{k=0}^n(-1)^{n-k}\\binom{n}{k}k^m\\tag{25}\\]
\\[S(m,k)=\\dfrac{1}{k!}\\sum_{i=0}^k(-1)^{k-i}\\binom{k}{i}k^m\\tag{26}\\]
由于公式(11)对任意\\(n\\leqslant m\\)成立,故有等式(27)左成立,从而\\(S(m,k)\\)给出了多项式组\\(\\{x^m\\}\\)和\\(\\{(x)_m\\}\\)的线性表出关系。这样的线性表出必定有逆关系(式(27)右),其中的\\(s(m,k)\\)就被称为第一类Stirling数,它和第一类Stirling数有关系式(28)。
\\[x^m=\\sum_{k=0}^mS(m,k)(x)_k\\;\\Leftrightarrow\\;(x)_m=\\sum_{k=0}^ms(m,k)x^k\\tag{27}\\]
\\[\\sum_{k=0}^mS(m,k)s(k,n)=\\delta_{nm}=\\left\\{\\begin{matrix}1,&\\text{if}\\;m=n\\\\0,&\\text{if}\\;m\\ne n\\end{matrix}\\right.\\tag{28}\\]
另一方面,考察式(27)右,不难知道\\(s(m,k)\\)有递推式(29),类似地有表达式(30)。\\(s(m,k)\\)正负项交叉出现,为了寻找其组合意义,考察表达式(31)中的\\(c(m,k)\\)。它显然是\\(s(m,k)\\)的绝对值,并且满足式(32)。容易验证,含有\\(k\\)个轮换的\\(m\\)元置换数,也满足式(32)的递推关系,这便是它的组合意义。
\\[s(m,k)=s(m-1,k-1)-(m-1)s(m-1,k)\\tag{29}\\]
\\[s(k+r,k)=(-1)^r\\sum_{1\\leqslant k_1\\leqslant k_2\\leqslant\\cdots\\leqslant k_r\\leqslant k+r}k_1k_2\\cdots k_r\\tag{30}\\]
\\[(x)^m=\\sum\\limits_{k=0}^mc(m,k)x^k\\tag{31}\\]
\\[c(m,k)=c(m-1,k-1)+(m-1)c(m-1,k)\\tag{32}\\]
• 求\\(1^{\\lambda_1}2^{\\lambda_2}\\cdots m^{\\lambda_m}\\)型置换的个数。
以上是关于组合数学 04 - 基本计数问题的主要内容,如果未能解决你的问题,请参考以下文章