首页 > 其他分享 >生成函数GeneratingFunction

生成函数GeneratingFunction

时间:2023-04-29 15:55:04浏览次数:33  
标签:... GeneratingFunction +... frac 函数 2x 生成 therefore

生成函数GeneratingFunction

极限

\(\forall \rightarrow\)对于
\(\exists \rightarrow\)存在
极限:\(\forall \epsilon,\exists N,N>n,|a_n-A|<\epsilon\)
就是说,对于所有(任意小的非负整数)\(\epsilon\)存在\(N\),使得\(a_n\)与A的差值小于\(\epsilon\)
我们就把\(A\)叫做此序列的极限\(\lim_{n\rightarrow\infty}a_n=A\)

有限数列没有极限!

若数列中的值全部相同的也没有极限!

\(\{1,\frac{1}{2},\frac{1}{3},\frac{1}{4},...\}的极限是0\)

\(\{1,0,0,0,0,0,...\}\)的极限是0

导数

To be continued:D

泰勒公式

To be continued:D

生成函数

如何简短的表示一个序列呢?
\(\left\{1,1,1,1,1,1,1,...\right\}\)
我们以一多项式来表达,以x的指数为下标,系数为值,就可以得到
\(A=\left\{1*x^0,1*x^1,1*x^2,1*x^3,...\right\}\)

\(A=\left\{1,x,x^2,x^3,...\right\}\)
注意,这个序列的长度是无限的

\[\because A=1+x+x^2+x^3+...\\ \therefore x*A=x+x^2+x^3+...\\ \therefore (1-x)A=1\\ \therefore A=\frac{1}{1-x} \]

\(\frac{1}{1-x}\)就是生成这个序列的函数,也就是说,它就是生成函数

类似的,可以得到:

\[\frac{2}{1-x}=2,2,2,2,2,2...\\ \frac{1}{1+x}=1-x+x^2-x^3...=1,-1,1,-1,...\\ \frac{1}{1-2x}=1+2x+4x^2+8x^3...=1,2,4,8,...\\ \]

当然,生成函数支持加法和乘法(上面已经有例子了)

\[\frac{1}{1+x}+\frac{1}{1-x}=\frac{2}{1-x^2}\\ 1,1,1,1,...+1,-1,1,-1,...=2,0,2,0,...\\ \frac{1}{1-x^2}=1,0,1,0,...\\ \frac{x}{1-x^2}=\frac{1}{1-x}-\frac{1}{1-x^2}=0,1,0,1,...\\ \]

还有

\[令A=1+3x+5x^2+7x^3+...\\ \therefore xA=1x+3x^2+...\\ \therefore (1-x)A=1+2x+2x^2+...\\ \because \frac{2}{1-x}=2+2x^2+...\\ \therefore \frac{2x}{1-x}=2x+2x^2+...\\ \therefore 1+\frac{2x}{1-x}=1+2x+2x^2+...\\ \therefore (1-x)A=1+\frac{2x}{1-x}\\ \therefore A=\frac{1+\frac{2x}{1-x}}{1-x}=\frac{1+x}{(1-x)^2}\\ \]

\[令B=1+4x+9x^2+16x^3+25x^5+...\\ \therefore xB=1x+4x^2+9x^3+...\\ \therefore (1-x)B=1+3x+5x^2+...\\ \therefore (1-x)B=A=\frac{1+x}{(1-x)^2}\\ \therefore (1-x)B=\frac{1+x}{(1-x)^3} \]

如何生成有限数列呢?

\[\because A=1,x,x^2,x^3,...\\ \therefore x^4A=x^4+x^5+x^6+...\\ \therefore (1-x^4)A=1+x+x^2+x^3\\ 又\because A=\frac{1}{1-x}\\ \therefore (1-x^4)\times\frac{1}{1-x}=\frac{1-x^4}{1-x}=1+x+x^2+x^3 \]

如果对生成函数求导会如何?

\[(\frac{1}{1-x})'=\frac{1}{(1-x)^2}=1+2x+3x^2+4x^4+...\\ (\frac{1}{1-x})''=\frac{1}{(1-x)^3}=1+3x+6x^2+10x^4+15x^5+... \]

这里旨在于告诉你很多数列均可以用生成函数表示

此外的

\[F=1+1x+2x^2+3x^3+5x^4+...\\ \therefore F=\frac{1}{1-x-x^2}\\ 对于方程1-x-x^2=0\\ 解得x_1=\frac{1+\sqrt{5}}{2},x_2=\frac{1-\sqrt{5}}{2}\\ 用配方法倒推得1-x-x^2=(1-x_1)\times(1-x_2)\\ 设F=\frac{1}{1-x-x^2}=\frac{a}{1-x_1}+\frac{b}{1-x_2}\\ ...\\ To be continued:D \]

当然,普通生成函数的用处不止于此

有一些水果,求选苹果偶数个,选梨5的倍数个,橘不超过4个,桃最多一个,求选共n个水果的方案数

这咋办?还好,我们有生成函数!\

众所周知,普通生成函数的乘积就是组合数(你又知道?)
我们让i次项系数作为组合数

\[C=A+B=\sum_{n=0}^\infty(a_i+b_i)x_n \rightarrow 加法原则\\ C=A\times B=\sum_{n=0}^\infty\sum_{i=0}^{n}(a_i*b_{(n-i)})x_n\\ c_n=\sum_{i=0}^{n}(a_i*b_{(n-i)})x_n \rightarrow 乘法原则 \]

故得\(i\)次项系数即为相加为i的生成函数的所有方案数

苹果的生成函数:\(1+x^2+x^4+x^6+...=\frac{1}{1-x^2}\)
梨:\(1+x^5+x^{10}+...=\frac{1}{1-x^5}\)
橘:\(1+x+x^2+x^3+x^4=\frac{1-x^5}{1-x}\)
桃:\(1+x=\frac{1-x^2}{1-x}\)
相乘求组合,\(\frac{1}{1-x^2}\times\frac{1}{1-x^5}\times\frac{1-x^5}{1-x}\times\frac{1-x^2}{1-x}=\frac{1}{(1-x)^2}\)
发现恰为\(1+2x+3x^2+4x^4+...\)所以输出n即可
6!

但是,并不是所有题目都如此凑巧,我们还得算\((1+x^2+x^4+x^6+...)\times(1+x^5+x^{10}+...)\times ...\)

所以,我们将给出一个模板,旨在于做\(\uparrow\)上面的小乘法

//这里是一个用背包装物品的模板

c1[0]=1,l1=0;
//x[i]-->物品大小
//y[i]-->物品个数
for (int i = 1; i <= n; i++)//遍历物品
{
    l2 = l1 + x[i] * y[i];//预计的最高次数
    memset(c2, 0, sizeof(int) * (l2 + 1));//清空
    for (int j = 0; j <= y[i] && j * x[i] <= l2; j++)
        //当然,如果物品无限多不需要判断j <= y[i]
        for (int k = 0; k <= l1 && j * x[i] + k <= l2; k++)
            c2[j * x[i] + k] += c1[k];
    memcpy(c1, c2, sizeof(int) * (l2 + 1));//储存计算结果
    l1 = l2;
}
//最后,c1[n]表示装满大小k的背包的方案数

其实,看到这你也能发现,它可以用背包实现,但与背包相比,生成函数可快
普通生成函数只能解决组合问题!!!

指数生成函数

普通生成函数只能解决组合问题!!!

但是指数生成函数可以解决排列问题:D

To be continued:D

标签:...,GeneratingFunction,+...,frac,函数,2x,生成,therefore
From: https://www.cnblogs.com/ssj233/p/17364080.html

相关文章

  • 有哪些好用的代码生成工具?
    代码生成工具的历史可以追溯到20世纪50年代,当时的程序员使用手动编写代码的方式来开发软件。随着计算机技术的发展,需要更快速、更高效的代码生成工具来满足开发需求。在20世纪60年代,出现了一些基于规则和模板的代码生成工具,例如:Alice、穆尔和MARY等。在20世纪70年代,Microsoft公司......
  • python高阶用法汇总——(1)高阶函数
    lambda1defsum(a,b):2returna+b3print(sum(1,5))45lab=lambdaa,b:a+b6print(lab(1,3))1-3行正常用法,5-6lambda用法。lambda:冒号之前的全是参数,即函数括号里面的 sum(a,b)冒号之后的是表达式,即return的结果。lambda只能写在一行。一般情况下,我们不使用......
  • 构造函数和析构函数
    1.概念引入在说明构造函数和析构函数的概念之前,首先看一个例子下面这段代码是栈经典的应用场景括号匹配如图,栈必须先初始化,然后在每一个returnfalse之前都需要销毁栈,不然就会内存泄漏这样很繁琐,而且有些时候很容易忘记写,所以在C++中添加默认的成员函数,构造函数和......
  • Pytorch2 如何通过算子融合和 CPU/GPU 代码生成加速深度学习
    动动发财的小手,点个赞吧!PyTorch中用于图形捕获、中间表示、运算符融合以及优化的C++和GPU代码生成的深度学习编译器技术入门计算机编程是神奇的。我们用人类可读的语言编写代码,就像变魔术一样,它通过硅晶体管转化为电流,使它们像开关一样工作,并允许它们实现复杂的逻辑——这......
  • AOP实现将入参与出参写入日志文件中,每天生成一个文件
    LogAspectpackageorg.jeecg.interceptor;importcom.alibaba.fastjson.JSON;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Pointcut;i......
  • 数据库函数
    常用函数数据函数字符串函数日期和时间函数系统函数题目介绍实现数据加密常用函数1.数据函数SELECTABS(-8);/*绝对值*/SELECTCEILING(9.4);/*向上取整*/SELECTFLOOR(9.4);/*向下取整*/SELECTRAND();/*随机数,返回一个0-1之间的随机数*/SELECT......
  • C# 打包项目,.生成安装包
    一、准备工作1VisualStudio2015必须有相关的打包组件;2VisualStudio的打包组件有InstallShield和VisualStudioInstallerProjects(安装包:VSI_bundle)组件;3VisualStudioInstallerProjects还可在VS软件中下载,下载方式如下:a)点中菜单栏的“工具”选项,并选中“扩展和更新......
  • 「学习笔记」重修生成树
    最小生成树(MinimumSpanningTree,MST)为边权和最小的生成树。算法Kruskal算法实现将所有的边按边权从小到大排序,然后用并查集维护一条边所连接的两个点是否已联通(不能形成环)。intfind(intx){ returnfa[x]==x?fa[x]:fa[x]=find(fa[x]);}llkruskal(){ ll......
  • chipyard——自定义配置生成和前仿
    一,生成配置前面用rocket-chip仓库做了生成和前仿,为了方便扩展外设,这里转到chipyard仓库。首先我们生成一个之前用的配置: 为删SimDTM(我的测试框架不需要),先在rocket的subsystem/config下创建一个class: 然后在chipyard顶层创建config: makeCONFIG=MyConfig创建设计 发......
  • C语言函数大全-- s 开头的函数(2)
    C语言函数大全本篇介绍C语言函数大全--s开头的函数(2)1.setlinestyle1.1函数说明函数声明函数功能voidsetlinestyle(intlinestyle,unsignedupattern,intthickness);设置当前绘图窗口的线条样式、线型模式和线条宽度参数:linestyle:线条样式,取值范围......