zoukankan      html  css  js  c++  java
  • 组合数学及其应用——递推关系和生成函数

      将计数结果或者某个特殊数列的信息,呈现在一个函数关系式中,我们称之为生成函数,如这个名字,我们本质上讨论的是一个函数解析式,但是这个解析式以一个无穷级数的形式蕴藏着某个计数数列。

                               

      目前来看对于给出的这个“生成函数”的新定义,我们似乎看不到有什么很好的用处,但是随着问题的深入,它的作用便会呈现出来,例如在求解Catalan数的非齐次递推关系的时候就用到了生成函数的概念。

      例子1:

       

      在一些问题中,我们借助生成函数的概念,通过其他的运算定理,将一个∑形式的生成函数转化成其他的形式然后进行函数层次上的操作,能够使得我们处理问题站在一个新的视角。

      例子2:

       

      例子3:

      什么样的数列的生成函数是如下式子?

       

      例子4:确定苹果、香蕉、橘子和梨的n组合个数,其中每个n组合苹果的个数是偶数,香蕉的个数是奇数,橘子的个数是0到4之间,而且至少有一个梨.

       

      例子5:

      求装有苹果、香蕉、橘子和梨的果篮的可能数h(n),其中每个果篮中苹果数是偶数,香蕉数是5的倍数,橘子树最多有4个,而梨的个数是0或1.

       

                                 

       这种形式虽然给出了线性递推关系,但是各项系数不全为常数,下面我们引入一种求解线性常系数递推关系的通解求法。

      

     

      这一定理的作用在于:能够将需要O(n)时间复杂度求解的的数列,在O(logn)得到。

      Ex2:

      一串由a、b、c组成的通信文字的长度为n,要求通信文字中不能够有连续两个a出现,那么请问共有多少种情况?

     

      呼应其一开始我们给出的结论:求解递推关系为了更快的计算序列中的某项h[n],对比1、2两个例题我们发现,如果就编程计算而言,Ex1用这种方法是很好的,因为最终的形式比较的简单不含根号。而Ex2的形式如果交给计算机计算,就显得有些丑陋。例如斐波那契数列,利用该定理求得的解也带有根号,此时为了简化求得数列中某一项的时间复杂度,我们就要去寻求其他的方法(例如矩阵快速幂)。

  • 相关阅读:
    nyoj 117 求逆序数 (归并(merge)排序)
    2018年四川理工学院软件工程考试大纲(软件需求分析)
    2018年四川理工学院软件工程考试大纲(软件计划与可行性研究)
    hdu 1166 敌兵布阵 (线段树、单点更新)
    hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)
    周末手撸管理系统(一)
    drf源码save以及response
    drf框架serializers中ModelSerializer类简化序列化和反序列化操作
    drf框架序列化和返序列化
    django模型中有外键关系的表删除相关设置
  • 原文地址:https://www.cnblogs.com/rhythmic/p/6124323.html
Copyright © 2011-2022 走看看