zoukankan      html  css  js  c++  java
  • 生成函数&多项式全家桶导学案

    数学导学案。

    OneInDark巨佬的博客放在前面以供膜拜。

    该导学案完成时间跨度超过一年,所以看着会很奇怪,但没关系,除了我不会有人看的。

    前置知识

    可能需要的知识。

    求导公式

    仅有一些较常用的公式。

    \((x^a)'=ax^{a-1}\)

    \((a^x)'=a^x\times lna\),例:\((e^x)'=e^x\)

    \((sin(x))'=cos(x)\)

    \((cos(x))'=-sin(x)\)

    \((ln(x))'=\frac{1}{x}\)

    \((f+g)'=f'+g'\)

    \((f(g(x)))'=f'(g(x))g'(x)\) (链式法则)

    泰勒展开/泰勒多项式

    定义

    定义对于函数 \(f\),设它在点 \(x_0\) 存在直到 \(n\) 阶的导数,则我们由这些导数构造一个 \(n\) 次多项式:

    \(T_n(x)=f(x_0)+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+...+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n\)

    称为 \(f\) 在点 \(x_0\) 处(带有皮亚诺型余项)的泰勒多项式\(T_n(x)\) 的各项系数称为泰勒系数

    注: \(f^{(n)}\) 表示 \(f\)\(n\) 阶导,而 \(f^n\) 才表示幂的形式。

    定理

    若函数 \(f\) 在点 \(x_0\) 存在直到 \(n\) 阶的导数,则 \(f(x) =T_n(x) +o((x−x_0)n)\)

    \(f(x)=\underset{i=0}{\overset{n}{\sum}}\frac{f^{(i)}(x_0)}{i!}(x-x_0)^i\)

    典例营

    我们通常可以令 \(x_0=0\) 来解决一些问题。

    例1

    \(f(x)=e^x\)

    考虑 \((e^x)'=e^x\)

    \(e^x=\underset{i=0}{\overset{n}{\sum}}\frac{x^i}{i!}\)

    例2

    \(f(x)=sin(x)\)

    考虑 \(f'(x)=cos(x),f''(x)=-sin(x),f^{(3)}=-cosx(x),f^{(4)}=sin(x)\),出现循环

    看一看 \(x_0=0\) 时的取值: \(f'(0)=1,f''(0)=0,f^{(3)}(0)=-1,f^{(4)}(0)=0\)

    \(sin(x)=\frac{x}{1!}-\frac{x^3}{3!}+\frac{x^5}{5!}+...+(-1)^k\frac{x^{2k+1}}{(2k+1)!}(k\in Z)\)

    例3

    \(f(x)=cos(x)\)

    类似的, \(cos(x)=1-\frac{x^2}{2!}+\frac{x^4}{4!}+...+(-1)^k\frac{x^{2k}}{(2k)!}(k\in Z)\)

    例4

    \(f(x)=ln(1+x)\)

    \(f'(x)=\frac{1}{1+x},f''(x)=-\frac{1}{(1+x)^2},f^{(3)}(x)=\frac{2}{(1+x)^3},f^{(4)}(x)=-\frac{3}{(1+x)^4},f^{(k)}(x)=(-1)^{k+1}\frac{(k-1)!}{(1+x)^k}\)

    \(f^{(k)}(0)=(-1)^{k-1}(k-1)!\)

    \(f(x)=\underset{i=0}{\overset{n}{\sum}}\frac{f^{(i)}(x_0)}{i!}(x-x_0)^i=\underset{i=0}{\overset{n}{\sum}}\frac{(-1)^{i+1}(i-1)!}{i!}x^i=\underset{i=1}{\overset{n}{\sum}}(-1)^{i+1}\frac{x^i}{i}\)

    变式:\(f(x)=ln(1-x)\)

    \(ln(1+x)=\underset{i=1}{\overset{n}{\sum}}(-1)^{i+1}\frac{x^i}{i}=(-1)\underset{i=1}{\overset{n}{\sum}}\frac{(-x)^i}{i}\)

    \(ln(1-x)=-\underset{i=1}{\overset{n}{\sum}}\frac{x^i}{i}\)

    特征根(咕咕咕~)

    这玩意可以推通项公式,等我学会了来写。

    普通生成函数

    定义

    对于一个无穷序列 \(\{a0,a1,a2,···\}\),定义其普通生成函数为形式幂级数:\(\underset{k=0}{\overset{+\infty}{\sum}}a_kx^k\)

    典例营

    例0

    序列 \(\{\frac{1}{0!},\frac{1}{1!},\frac{1}{2!},...\}\) 的普通生成函数?

    \[e^x \]

    例1

    序列 \(\{1,1,1,1,...\}\) 的普通生成函数?

    \[\begin{aligned} S&=\sum_{k=0}^{+\infty}=x^k\\ Sx&=\sum_{k=0}^nx^{k+1}=\sum_{k=1}^nx^k\\ (x-1)S&=-x^0=-1\\ S&=\frac{1}{1-x}\\ \end{aligned}\]

    例2

    \(\{1,0,1,0,...\}\)

    \[\sum_{k=0}^{+\infty}x^{2k}=\sum_{k=0}^{+\infty}(x^2)^k=\frac{1}{1-x^2} \]

    这不就是例1再换个元吗?!

    例3

    \(\{1,2,4,8,...,2^n\}\)

    \[S=\sum_{k=0}^{+\infty}2^k\times x^k=(2x)^k=\frac{1}{1-2x} \]

    例4

    \(\{1,2,3,4,5,...\}\)

    \[\begin{aligned} &\sum_{k=0}^{+\infty}(k+1)x^k\\ &=\sum_{k=1}^{+\infty}kx^{k-1}\\ &=\sum_{k=1}^{+\infty}(x^k)'\\ &=(\sum_{k=1}^{+\infty}x^k)'\\ &=(\sum_{k=0}^{+\infty}x^k)'\\ &=(\frac{1}{1-x})'\\ &=\frac{1'\times (1-x)-(1-x)'\times 1}{(1-x)^2}\\ &=\frac{1}{(1-x)^2}\\ \end{aligned}\]

    好像过于冗长了

    补充一个分式求导公式:

    \((\frac{u}{v})'=\frac{u'v-uv'}{v^2}\)

    例5

    \(\{1,3,5,7,...\}\)

    \[\begin{aligned} S&=\sum_{k=0}^{+\infty}(2k+1)x^k\\ xS&=\sum_{k=0}^{+\infty}(2k+1)x^{k+1}=\sum_{k=1}^{+\infty}(2k-1)x^k\\ (1-x)S&=\sum_{k=1}^{+\infty}2x^{k}+1=\sum_{k=0}^{+\infty}2x^k-1=\frac{2}{1-x}-1=\frac{1+x}{1-x}\\ S&=\frac{1+x}{(1-x)^2} \end{aligned}\]

    进阶例题

    \(\{4,5,7,10,14,19,25,...\}\)

    \[\begin{aligned} S&=\sum_{k=0}^{+\infty}(4+\frac{k(k+1)}{2})x^k\\ 2S&=\sum_{k=0}^{+\infty}(8+k(k+1))x^k=\sum_{k=0}^{+\infty}(k^2x+kx+8)x^k=\sum_{k=0}^{+\infty}k^2x^k+\frac{x}{(1-x)^2}+\frac{8}{1-x}\\ T&=\sum_{k=0}^{+\infty}k^2x^k\\ xT&=\sum_{k=1}^{+\infty}(k-1)^2x^k\\ (1-x)T&=\sum_{k=1}^{+\infty}(2k-1)x^k=2x\sum_{k=1}^{+\infty}kx^{k-1}-\sum_{k=1}^{+\infty}x^k=\frac{2x}{(1-x)^2}-\frac{x}{1-x}\\ T&=\frac{2x}{(1-x)^3}-\frac{x}{(1-x)^2}\\ 2S&=T+\frac{x}{(1-x)^2}+\frac{8}{1-x}=\frac{2x}{(1-x)^3}+\frac{8}{1-x}\\ S&=\frac{x}{(1-x)^3}+\frac{4}{1-x} \end{aligned}\]

    指数生成函数

    定义

    对于一个无穷序列 \(\{a0, a1, a2,···\}\),定义其指数生成函数为级数:\(\underset{k=0}{\overset{+\infty}{\sum}} a_k\frac{x_k}{k!}\)

    注:普通生成函数通常用来解决无标号计数问题,指数生成函数通常用来解决带标号的计数问题。

    其中 \(k!\) 是为了在卷积过程中凑出组合数,同理,在有组合数的情况下我们选用指数生成函数而不是普通生成函数。

    典例营

    例1

    \(n\) 个元素的排列数 \(p_n=n!\) 的指数生成函数?

    \(\hat{P}(x)=\underset{n=0}{\overset{+\infty}{\sum}}\frac{n!}{n!}x^n=\frac{1}{1-x}\)

    这里我们用 \(\hat{}\) 来区分指数生成函数和普通生成函数。

    例2

    \(n\) 个元素的环排列数 \(c_n= (n−1)!(n≥1)\) 的指数生成函数?

    \(\hat{C}(x)=\underset{n=1}{\overset{+\infty}{\sum}}\frac{x^n}{n}=-ln(1-x)=ln(\frac{1}{1-x})\)

    后一步的推导见 泰勒展开-例4-变式

    多项式全家桶

    代码戳这里

    乘法

    FFT & NTT(模板)

    求逆

    【模板】多项式乘法逆(洛谷)

    具体来说,我们已知多项式 \(F\),满足 \(F\times G\equiv1\pmod{x^n}\),求多项式 \(g\)

    考虑倍增。

    \(F\times G_0\equiv1\pmod{x^{\lceil\frac{n}{2}\rceil}}\)

    那么 \(F*G\equiv 1 \pmod{x^{\lceil\frac{n}{2}\rceil}}\)

    作差 \(F(G-G_0)\equiv 0\pmod{x^{\lceil\frac{n}{2}\rceil}}\)

    \((G-G_0)\equiv 0\pmod{x^{\lceil\frac{n}{2}\rceil}}\)

    平方\(G^2-2GG_0+G_0^2\equiv0 \pmod{x^n}\)

    两边同乘 \(F\) 得:\(FG(G-2G_0)+FG_0^2\equiv 0\pmod{x^n}\)

    \(F*G\equiv 1 \pmod{x^n}\)

    \(G-2G_0+FG_0^2\equiv 0\pmod{x^n}\)

    \(G\equiv FG_0^2-2G_0\pmod{x^n}\)

    初值当然是 \(G\equiv1 \pmod{x}\)

    所以 \(G[0]=F[0]^{-1}\)

    开根

    【模板】多项式开根(洛谷)

    竟然在没看题解的情况下瞎推出来而且在考试过程中写出来并过了题?!

    思路依然是倍增。

    \(G\equiv \sqrt{F}\pmod{x^n}\)

    \(G'\equiv \sqrt{F}\pmod{x^{\lceil\frac{n}{2}\rceil}}\)

    相减 \(G-G'\equiv 0\pmod{x^{\lceil\frac{n}{2}\rceil}}\)

    平方 \(G^2-2GG'+G'^2\equiv 0\pmod{x^n}\)

    变换 \(F-2GG'+G'^2\equiv 0\pmod{x^n}\)

    移项 \(G\equiv \frac{F+G'^2}{2G'} \pmod {x^n}\)

    题目一般保证 \(F[0]=1\),所以 \(G[0]=1\)

    上面那些不知道什么时候写的,很不正规,反正这里的 \(G'\) 不是求导就对了。

    我们直接套下面exp那里的公式:

    \(f(u,v)=u^2-v=0\)

    \(u_{n+1}=u_n-\frac{u_{n}^2-v}{2u_{n}}=\frac{u_{n^2}+v}{2u_n}\)

    这不就和上面那个写得一模一样了吗?

    ln

    【模板】多项式对数函数(洛谷)

    首先我不会积分!但是我们可以简单理解:积分是求导的逆运算。

    \(G(x)\equiv ln(F(x))\pmod {x^n}\),两边求导得:

    \(G'(x)\equiv \frac{F'(x)}{F(x)}\pmod {x^n}\)

    多项式求导直接根据公式 \((x^n)'=nx^{n-1}\) 即可。

    我们得出 \(G'(x)\) 之后再积分就好了,积分是求导的逆运算,所以有 \(\quad \int x^{a}dx={1\over a+1}x^{a+1}\)

    由于不会打积分的符号所以从其他地方把公式抄过来了。

    注意这里的多项式求 ln 要求 \(F_0=1\),由此可得 \(G_0=0\),否则不收敛,在模意义下做不了。

    exp(含各函数通式)

    【模板】多项式指数函数(洛谷)

    我受不了了,我要给出通式!令 \(u\) 为待求多项式,\(v\) 为已知多项式,那么我们要做的就是求 \(f(u,v)\equiv 0\pmod{x^n}\)

    首先对于 \(n=1\) 的情况,其实就是把常数提出来解方程,然后我们考虑倍增。

    假设我们求出了 \(f(u,v)\equiv 0\pmod {x^{2^n}}\) 的解 \(u_n\),考虑如何求出 \(f(u,v)\equiv 0\pmod{x^{2^{n+1}}}\) 的解 \(u_{n+1}\)

    我们直接把 \(f(u_{n+1},v)\)\((u_n,v)\) 处泰勒展开,得:

    \(f(u_{n+1},v)=f(u_n,v)+\frac{f_{u}(u_n,v)}{1}(u_{n+1}-u_n)+...+\frac{f_{u(k)}(u_n,v)}{k!}(u_{n+1}-u_n)^k+...\)

    同时我们可以发现 \(x^{2^n}|u_{n+1}-u_n\),那么平方可得 \(x^{2^{n+1}}|(u_{n+1}-u_n)^2\),所以从第三项开始模 \(x^{2^{n+1}}\) 为 0,有:

    \(f(u_{n+1},v)=f(u_n,v)+f_{u}(u_n,v)(u_{n+1}-u_n)\equiv 0\pmod {x^{2^{n+1}}}\)

    \(u_{n+1}=u_{n}-\frac{f(u_n,v)}{f_u(u_n,v)}\pmod {x^{2^{n+1}}}\)

    有了这么个NB玩意,我们直接套公式就好了。其实这玩意就是传说中的牛顿迭代

    \(u-e^v=0\Rightarrow f(u,v)=ln(u)-v\equiv 0\pmod{x^n}\)

    \(u_{n+1}=u_n-\frac{ln(u)-v}{\frac{1}{u_n}}=u_n(1-ln(u_n)+v)\pmod {x^{2^{n+1}}}\)

    由于我糟糕的数学功底,我并没有区分上下两个式子的 n,不过应该都看得懂是什么意思。

    注意这里的时间复杂度 \(T(n)=2T(\frac{n}{2})+O(n\log_2n)=O(n\log_2n)\)

    语录

    这个我们都知道,可能并不是都知道,但是我告诉你们。

    诶,我掉线了?哦,没掉线,我还活着。

    别人的问题:最后分治ntt怎么做;我们的问题:\(d_i\) 的定义是什么?

    我都讲完了你问我 \(d_i\) 的定义是什么?!

    这个东西你们见过吗?没见过的话现在见过了。

  • 相关阅读:
    IDEA编译Flume Sink通不过解决方法
    Hive基础之Hive体系架构&运行模式&Hive与关系型数据的区别
    Hive基础之Hive环境搭建
    Hive基础之Hive是什么以及使用场景
    pig和mysql脚本对比
    pig入门案例
    pig概述
    sqoop操作之ETL小案例
    java里面的package/import 和PHP里面的namespace/use 是一模一样的吗
    jQuery对象和DOM对象使用说明,需要的朋友可以参考下。
  • 原文地址:https://www.cnblogs.com/PPLPPL/p/14413426.html
Copyright © 2011-2022 走看看