浅谈生成函数和多项式

来源:互联网 发布:2017年最污的网络热词 编辑:程序博客网 时间:2024/05/21 06:41

我们先来看这样一个生活问题:

你手头有1个1元,一个2元,一个3元(假币!!)和一个4元(这是哪个国家的题啊....),之后你会很好奇你能用这些钱组合成多少种数目。

很小学的问题,只要我们稍微那笔枚举一下就能知道,我们能得到0-10元之间所有的钱数。

现在,我们用函数去表示一下每个钱,1元就表示为1+x,2元表示为1+x^2,3元表示为1+x^3,4元表示为1+x^4,也就是说,我用x的指数表示我的钱数。

so....我们将这四个式子相乘

(1+x)(1+x^2)(1+x^3)(1+x^4)
=(1+x+x^2+x^3)(1+x3+x^4+x^7)
=1+x+x^2+2x^3+2x^4+2x^5+2x^6+2x^7+x^8+x^9+x^10  

可以看出来,x的指数由0到10全部都有,说明能凑出0-10元间所有的钱数,而前面的系数,就是你凑出该钱数的方案数。

这是为什么呢?

我们是用指数作为了钱数,而指数乘积是相加,所以,我3元的x^3和4元的x^4相乘也就是这两个钱凑在了一起x^7表示的7元,而多项式的系数则表示你凑成的x^n有多少项,也就是多少种方案,如果这个不好理解,我们举个简单的例子。

你有一块钱,还有1块钱(注意,这两个一块是不一样的哦~),你能凑成yi块的方案数,很明显是2吧,我们用函数方法做一下:

(1+x)(1+x)=1 + x + x + x^2 = 1 + 2x + x^2,x的系数是2。

这就是生成函数。

我们来看一道类似的问题

小明去买一个6元的切糕(糕富帅....)他手头有1元,2元,3元(肯定是国外的小明了),每个钱的张数无限(果然是糕富帅)....不过,小明为了低调些,所以他要正好拿6元钱出门,于是,糕富帅就好奇了,他有多少种方案呢???

结合上面的问题,我们知道1元,因为无数个,所以我们能得到2*1元,3*1元,4*1元,.....于是,1元所能表示的不再单单是1+x,而是1+x+x^2+x^3+x^4......,而2元只能往上表示4元,6元,8元.....所以是1+x^2+x^4+x^6.......同理,3元为1+x^3+x^6+x^9.....

之后我们将三个式子相乘

(1+x+x^2+x^3+x^4......)(1+x^2+x^4+x^6.......)(1+x^3+x^6+x^9.....)

=1+x+2x^2+3x^3+4x^4+5x^5+7x^6........

因为x^6的系数是7,所以我们知道方案数是7了,不过.....小明突然意识到他要买的是切糕而不是蛋糕,6元是不够的,要12元才行....

显然x^12的系数如果将式子展开着实让人累死.....于是,我们引入下面的话题,多项式。


首先,我们纵观上述的问题,发现一个很酱油的变量....x,你x存在的目的就是为了构造一个函数,好让指数能有地方放,而你x取值范围什么对生成函数没有半毛钱影响......

所以,我们不妨假设x是趋近于0的,为什么?因为x趋近于0有很多性质啊,你不知道?去重修高数吧。

因为x趋近于0,我们有如下性质


为什么我们要努力变成这样呢?因为我们有个伟人叫牛顿,他发明了叫二项式的东西,之后.....


这样,我们就能求解系数问题了。

让我们来个栗子:

求(x^2+x^3+x^4+x^5+x^6....)^5中x^16的系数

(x^2+x^3+x^4+x^5+x^6....)^5

=[x^2(1+x+x^2+x^3.....)]^5

=x^10(1+x+x^2+x^3....)^5

=x^10/(1-x)^5

所以,我们要求(1-x)^-5中x^(16-10)=x^6的系数

根据(4)得出210.....

于是,我们再看个栗子....

(1+x+x^2+x^3....)(1+x^2+x^4+x^6.....)的x^15系数

(1+x+x^2+x^3....)(1+x^2+x^4+x^6.....)

=1/(1-x)(1-x^2)                                                      (2)

=[1/2(1-x)^2]+[1/4(1-x)]+[1/4(1+x)]                        (3)

推出(3)后,我们根据公式,可以导出每项的系数,之后因为是+相连,所以最后就是系数和了。

而最难的是(2)->(3)怎么做的呢?

如果你数学感觉非常好,那考试绝大部分能看出来的。

如果不好.....

请看这里:

(此处转自Matrix67的BLOG,连接:http://www.matrix67.com/blog/archives/120)

现在的任务是要把x/(1-x-x^2)还原成通项公式。这不是我们刚才的1/(1-x)^n的形式,我们要把它变成这种形式。我们发现,1-x-x^2=[1-(1-√5)x/2]*[1-(1+√5)x/2] ((1-√5)/2和(1+√5)/2是怎么算出来的?显然它们应该是x^2-x-1=0的两个根)。那么x/(1-x-x^2)一定能表示成?/[1-(1-√5)x/2]+?/[1-(1+√5)x/2]的形式(再次抱歉,输入数学公式很麻烦,将就看吧)。这是一定可以的,因为适当的?的取值可以让两个分式通分以后分子加起来恰好为一个x。?取值应该是多少呢?假设前面一个?是c1,后面那个是c2,那么通分以后分子为c1*[1-(1+√5)x/2]+c2*[1-(1-√5)x/2],它恰好等于x。我们得到这样两个式子:常数项c1+c2=0,以及一次项-c1*(1+√5)/2-c2*(1-√5)/2=1。这两个式子足够我们解出c1和c2的准确值。  


根据Matrix67提供的思路,我们可以将任意多项式化为通项公式,之后求系数......

显然,计算量大的惊人.....

于是,我们这样看一下


求这个式子的系数.....

我们这样来看:


于是,我们根据高数里面的数列知识得出:


可以推出:


同理:


于是.....

D是我们求的系数,而我们已知A都是1,(k在0到正无穷),而当k小于0时,则A,B,C,D的值全为0,因为不存在该项,所以系数为0,于是我们根据这个递推关系式,就能求得D,也就是系数的解。