生成函数 应用

本文介绍了生成函数在解决组合问题中的应用,包括通过生成函数推导斐波那契函数的通项公式,以及利用生成函数解决买水果、砝码称重和整数划分等组合方案数问题。通过实例解析了生成函数的构造和求解过程。
摘要由CSDN通过智能技术生成

引言

生成函数有普通型生成函数和指数型生成函数两种,其中普通型用的比较多。形式上说,普通型生成函数用于解决多重集的组合问题,而指数型母函数用于解决多重集的排列问题。

因水平有限,此博客涉及的均是生成函数的初级应用,用于解决相关的算法竞赛题目。


斐波那契函数的通项公式

考虑一个经典问题:
求斐波那契函数的通项。
此问题的结论了解斐波那契函数的人都知道,那就是:
F ( n ) = 1 5 ∗ [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] F(n) = \frac{1}{\sqrt5}*[(\frac{1+\sqrt5}{2})^n - (\frac{1-\sqrt5}{2})^n ] F(n)=5 1[(21+5 )n(215 )n]

此结论初看好像在算法竞赛中没什么用,因为对于求斐波那契函数第n项的值,存在一个经典的算法,那就是矩阵快速幂。而且因浮点数存在误差,故计算机并不能精确计算出该公式的值。

但通过对此公式的深入了解和推导证明,我们将对斐波那契函数有更深的理解,并将矩阵快速幂和生成函数两个算法进行联系。

下面我们试着来推导这个公式。

首先从熟悉的矩阵快速幂来入手。

由递推关系式,可以构造矩阵:

[ 0 1 1 1 ] ∗ [ F ( n − 1 ) F ( n ) ] = [ F ( n ) F ( n + 1 ) ] \begin{bmatrix} 0 &1 \\1 & 1\end{bmatrix} * \begin{bmatrix} F(n-1)\\ F(n)\end{bmatrix} = \begin{bmatrix} F(n ) \\F(n+1)\end{bmatrix} [0111][F(n1)F(n)]=[F(n)F(n+1)]

通过观察已知,这其实也是一个递推式,逐层递推易得:
(1) [ 0 1 1 1 ] n ∗ [ F ( 0 ) F ( 1 ) ] = [ F ( n ) F ( n + 1 ) ] \begin{bmatrix} 0 &1 \\1 & 1\end{bmatrix}^n* \begin{bmatrix} F(0)\\ F(1)\end{bmatrix} = \begin{bmatrix} F(n ) \\F(n+1)\end{bmatrix} \tag1 [0111]n[F(0)F(1)]=[F(n)F(n+1)](1)

假设:
M n = [ 0 1 1 1 ] n M^n= \begin{bmatrix} 0 &1 \\1 & 1\end{bmatrix}^n Mn=[0111]n

故问题的关键便在于如何求解 M n M^n Mn

在算法竞赛中,常用的手段是利用计算机的强大计算能力和快速幂的思想来求解。
但实际上,在数学层面还有一个更加常用的方法来求解方阵的n次方,那就是矩阵的相似对角化。
由定义:
M = Q A Q − 1 M = QAQ^{-1} M=QAQ1

M n = Q A Q − 1 ∗ Q A Q − 1 ∗ Q A Q − 1 ∗ . . . . M^n = QAQ^{-1} * QAQ^{-1} *QAQ^{-1}*.... Mn=QAQ1QAQ1QAQ1....
因:
Q ∗ Q − 1 = E Q*Q^{-1} = E QQ1=E

故推出:
(2) M n = Q A n Q − 1 M^n = QA^nQ^{-1}\tag2 Mn=QAnQ1(2)

下面我们便来尝试将M矩阵相似对角化:

d e t ( M − λ E ) = 0 = = > λ = 1 + 5 2 和 1 − 5 2 det(M - \lambda E) = 0 ==> \lambda = \frac{1+\sqrt5}{2} 和\frac{1-\sqrt5}{2} det(MλE)=

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值