离散数学及其应用——ch5 基本组合计数

      第五章介绍了基本的组合计数知识,组合数学是研究如何对对象进行安排的学科,最早诞生于赌博游戏,因此也是概率论的基础,这章介绍的基本知识点涉及如下几个方面:基本计数原理,鸽巢原理,基本排列和组合,二项式定理和广义排列和组合。
     先来看看基本计数原理,基本计数原理可以说是组合计数的基础,为什么这么说呢?因为很多组合计数的公式都是由基本计数原理推导出来的,因此基本计数原理可以说得上是组合基础大厦的基石。基本的计数原理有两条,其实就是大家熟悉的“乘法原理”和“加法原理”。二者既有区别又有联系。首先我们先来假定有这么一个基本过程(procedure),它代表完成某个工作的流程(你也可以把它理解为解决某个问题的算法),它有两个基本的步骤(任务)组成,也就是任务一(task1)和任务二(task2),完成这两个任务后我们才真正地做完了整个过程。那么乘法原理讲的道理就是,如果我们用n1种方法完成了任务一,那么接下来如果我们再用n2种方法完成了任务2,那么总共我们能够用来完成整个过程的方法数为n1*n2。而加法原理则认为,对于任务1,如果它有n1种方式完成,同时也有n2种方式完成,且n1种方法的每一种方法都不会出现在n2中,也就是说两种方法的集合之间是没有交集的(注意,这是一个重要条件!如果存在交集的话就不是加法原理了,而是容斥原理,所以你可以将加法原理看成容斥原理的一个特例),那么完成任务1的方式总共有n1+n2种。除了基本计数原理以外,鸽巢原理也是一个有用的组合工具,k为正整数,如果我们有大于等于(k+1)只鸽子飞到了k个鸽巢中,那么一定存在大于等于1个的鸽巢中有大于等于2只的鸽子。广义的鸽巢原理甚至说的更仔细——N只鸽子飞到k个鸽巢里,那么有大于等于1个鸽巢中含有N/k向上取整这么多只鸽子,然后我们就可以使用N=k(r-1)+1这个公式对N进行计算。鸽巢原理有很多很巧妙的应用,不好掌握,要注意反复体会。
     组合数学既然是研究如何安排对象的学科,那么我们关注的重点当然要放在对象的安排问题上。对象的安排可以有两大类——有序的和无序的,有序安排就是排列,无序的安排就是组合。那么对于n个元素的r-排列,我们可以用乘法原理(看,大厦的基石出来了)得到排列数公式。又因为r排列可以看成是先选出r个数,然后对其进行全排列,所以r-组合的公式也就可以从r-排列的公式中得到了。得到的C(n,r)还有一个很厉害的名字,叫做——二项式系数,因为它大量出现于(x+y)^n的表达式中。对于这个表达式,我们有非常优美的二项式定理来完美定义,由二项式定理还推出了“1+1”,“1+(-1)”和“1+2”三个漂亮的推论。关于二项式系数,有大量的二项恒等式,比如著名的帕斯卡恒等式和帕斯卡三角(其实是杨辉三角好吧!)和范德蒙恒等式(让我想起了线性代数中的范德蒙行列式),对于这些组合恒等式的证明,我们引入了一个新的方法——组合证明,组合证明的基本原理就是证明恒等式的两边使用了不同的方式对同一类对象进行计数,是一个非常有趣的证明方法,因为你要把恒等式的两边用模型去套用,套对了就证明出来了。
     以上所说的还是基本的排列和组合,是不允许重复元素出现的。如果你认为组合计数就这点内容,那么你就太小看她啦,其实排列和组合还可以进一步推广的。对于排列,(1)如果我们允许重复元素出现的话,那么依然根据乘法原理得出其公式;(2)如果待排列的元素中出现了无法区分的元素(比如单词“SUCCESS”中出现了3个S,它们都是不可区分的),那么这种含有不可区分元素的排列就要在全排列的基础上除去冗余的重复排列(相对于不可区分的元素而言)。说完了排列,我们来说说广义的组合,广义的组合也是允许重复元素出现的,对于这种情况,我们用钱盒子模型再加上一点点基本的计数公式就推导出来了,假设我们有一个钱盒子,它有几个槽,分别是1美元,5美元,10美元和20美元的,装有各类面值的美元若干,如果我要取出5张纸币,有多少方法,这不就允许重复了么,这样的情况下通过分隔栏和纸币数目的建模我们得到公式C(n+r-1,r),问题搞定!说到模型,下面就要引出更为强大的“盒子模型”了——对于很多计数问题,如果你能将它抽象成某种类型的盒子模型,那么你就可以套用模型解决问题了,这就是“观察和类比”的强大威力(乔治波利亚万岁!),盒子模型有四种,下面一一说来。(1)首先出场的是“可区分的对象放入可区分的盒子”模型,对于这些放入盒子的对象,我们可以这样看:放入盒子i中的对象都带上了i的标记,那么它们在盒子里是怎么个排列的顺序就无关紧要了(大家都是带i标记的,彼此平等),所以全排列除以每个盒子中对象的排列数就可以了(这与存在不可取分的元素的排列公式一样,因为其内涵和本质是相同的)(2)“不可区分的对象放入可区分的盒子”模型,不可区分的对象是说彼此是不可区分的,那么好,放入哪个盒子我们仍然给它做个标记,那么放入盒子i中的物体虽然不可区分,但是仍然有标记i,这样,我们将k个不可区分的对象放入n个可以区分的盒子中就相当于从n个盒子中取出总共k个对象一样,是不是很眼熟?猜对了,公式就是C(n+k-1,k),这与允许重复的组合公式是一样的。最后两类盒子模型是(3)“不可区分的对象放入不可取分的盒子”和(4)“可区分的对象放入不可取分的盒子”,前者用到了第二类Stirling数,后者用到了n的最多k次划分,不存在具体的公式。
     整个基本的组合计数,也就是这么多了,在此之上还有高级的计数计数,包括容斥原理和生成函数什么的,在第七章介绍。

你可能感兴趣的:(F,数据科学)