在第五章学习了基本的组合计数知识后,我们终于在第七章迎来了更高级的组合计数知识,把这章介绍的内容与第五章的内容合并起来,就形成了我们的组合数学工具箱,可以解决一大堆计数问题了,在计算机编程过程中很多问题其实都可以用计数模型进行建模,那么一个好的组合计数基本功当然是必不可少的了。下面我们就来总结一下这章都讲了哪些内容吧,这章的主题是三个基本方面:(1)递归关系;(2)生成函数;(3)容斥原理。
先来看看递归关系,递归关系定义的是一串数列{ak},它用数列的前几项来定义数列的通项。很多问题都可以用递归关系来建模,比如问一段时间后岛上兔子个数的斐波拉契数列,关心盘子移动次数的汉诺塔问题,以不同方式上楼的阶梯问题以及著名的约瑟夫问题等,都是用递归关系式来建模的。当我们得到递归关系的数学模型之后该怎么推导闭形式从而快速地得到问题的解呢?这里就涉及到一个解递归关系式的问题,有一类常见的“常系数线性递归关系”可以用系统的方法进行求解,常系数线性递归关系有两种,基本的是“常系数齐次线性递归关系”,这个概念要分解地看才能理解它的意义:“常系数”是指每一个项的系数都是常数;“齐次”是指每一项都是ai的倍数;“线性”则是指递归式是数列各项的线性组合。要解这个递归关系,首先要得到特征方程,由特征方程的根以及根的重数来得到递归关系式的通解公式,然后再用初始条件来确定通解公式中的待定系数,最后得到通解。更复杂一些的是“常系数非齐次线性递归关系”,这个关系式中存在不是ai倍数的项,该项通常是n的函数,记为F(n),因此解法就比齐次关系要麻烦一些,