zoukankan      html  css  js  c++  java
  • 多项式&生成函数(~~乱讲~~)

    多项式

    多项式乘法

    FFT,NTT,MTT不是前置知识吗?随便学一下就好了(虽然我到现在还是不会MTT,exlucas也不会用
    FTT总结
    NTT总结

    泰勒展开

    如果一个多项式(f(x))(x0)时存在n阶导(就是可以求导(n)次),那么可以换成下面这样的一个式子:
    (egin{aligned}f(x)&=f(x0)+frac{f^1(x0)}{1!}(x-x0)+frac{f^2(x0)}{2!}(x-x0)^2+...+frac{f^n(x0)}{n!}(x-x0)^n+xi\&=sum_{i=0}^n frac{f^i(x0)}{i!}(x-x0)^i+xiend{aligned})
    实在是不想写MathJax了,蒯一波yyb的

    反正余项(xi)趋近于无穷小(因为(n)趋近于无穷大),然后就可以忽略了.

    然后如果(x0=0)的时候就可以直接搞了。

    最常见的就是(e^x),因为这个东西是可以无限求导的.

    套到之前的式子里面就是:

    (e^x=1+frac{x}{1!}+frac{x^2}{2!}+frac{x^3}{3!}+...)

    牛顿迭代

    不会证明,背背公式就好了。
    (B_{t+1}(x)=B_t(x)-frac{F(B_t(x))}{F'(B_t(x))})

    多项式求逆

    随便推一下就可以了。
    就是考虑(A)为原来的,(B)为逆数组;
    这个东西可以套到牛顿迭代的式子里面去,然后就没了。

    多项式的其他操作

    挖坑待补(一般性都不要用)

    生成函数

    普通型生成函数(OGF)

    给出一个数列(a_0,a_1,a_2,...)

    它的OGF就是

    [F(x)=a_0+a_1*x+a_2*x^2+... \ =sum_{i=0}^{infty}a_i*x^i ]

    指数型生成函数(EGF)

    给出一个数列(a_0,a_1,a_2,...)

    它的EGF就是

    [F(x)=sum_{i=0}^{infty}frac{a_i}{i!}*x^i ]

    OGF拓展

    我们发现如果把斐波那契数列弄成一个生成函数的话,很显然就是:

    (F(x)=0+1*x+1*x^2+2*x^3+3*x^4+...)

    然后我们同时乘一下(x)

    (F'(x)=0+1*x^2+1*x^3+2*x^4+...)

    然后裂项一下就是:

    (F(x)-F'(x)=0+1*x+0+1*x^3+1*x^4+2*x^5)

    然后这样子就变成了:

    (x+x^2(0+1*x+1*x^2+...))

    也就是说:(F(x)-F'(x)=x+F(x)*x^2)

    发现这是一个好东西:

    (F(x)-x*F(x)=x+F(x)*x^2)

    然后移一下项就是:

    (F(x)*(x^2+x-1)*F(x)=-x)

    发现我们要求的是(F(x)),就可以写成:

    (F(x)=frac{x}{1-x-x^2})

    这个东西求的话还是线性的,考虑接着化简

    最后就是这么一个烂玩意:

    (fib_n = -frac{1}{sqrt5}(frac{1-sqrt5}{2})^n + frac{1}{sqrt5}(frac{1+sqrt5}{2})^n)

    OGF和EGF的区别

    我们发现EGF的公式多除了一个阶乘,也就意味分子多乘了一个阶乘,那么阶乘在排列组合下的意义是什么?

    顺序,所以EGF和OGF的应用也就出来了:

    • OGF表示的是组合意义.
    • EGF用于求排列下的一些东西

    引例:

    1.现在有A,B两种物品,A中的物品只能够取奇数个,B中的只能取3的倍数个,求取n个有多少种方法(忽略取出的顺序)

    考虑讲这两个写出来就是:

    (A(x)=1+3*x+5*x^2+...)

    (B(x)=0+3*x+6*x^2+...)

    然后把这两个卷起来的第(n)项就是答案


    2.现在有A,B两种物品,A中的物品只能够取奇数个,B中的只能取3的倍数个,求取n个有多少种方法(考虑取出的顺序)

    考虑顺序的话就是EGF,还是像上面一样写出来

    (A(x)=frac{1}{1!}x+frac{1}{3!}x^3+frac{1}{5!}x^5...)

    (B(x)=1+frac{1}{2!}x^2+frac{1}{4!}x^4+...)

    然后我们就可以感觉这两个东西和我们之前有一个很像:

    (e^x=1+frac{x}{1!}+frac{x^2}{2!}+frac{x^3}{3!}+...)

    不是吗?

    然后考虑(x)(-x)的展开和这个东西好像截然相反...

    然后搞一下就好了.

    所以:

    (A(x)=frac{e^x-e^{-x}}{2})

    (B(x)=frac{e^x+e^{-x}}{2})

    然后这两个东西就很简单了.

    应用

    例题什么的蒯一发yyb的不就好了

    字符串配对匹配相关

    回文串匹配

    BZOJ3160 万径人踪灭 Solution

    考虑下面的这样一个回文串的式子:
    (s[x+i]=s[x-i]),显然(x)是回文中心,然后考虑((x-i)+(x+i)=2x)这样的式子,不难发现就是一个卷积,然后就很简单了。

    考虑只有两种,ab,分别对于这两种字母作为1|0搞一下

    按照上面的做法卷起来-回文串的个数就是答案了.

    有向图计数

    具体观看Solution of DAG

    未完待续

  • 相关阅读:
    python基础008----Python中类/函数/模块的简单介绍
    linux基础004---用户管理、用户登录注销、系统关机重启
    python基础006----流程控制&推导式&深浅拷贝
    python基础005----字典&集合
    python基础004----列表&元组
    难缠的布隆过滤器,这次终于通透了
    C# 位图BitArray 小试牛刀
    以步步为营的风格解读 Redis分布式锁
    你是不是对MD5算法有误解?
    最适合新手的Redis Cluster搭建过程
  • 原文地址:https://www.cnblogs.com/mleautomaton/p/10269111.html
Copyright © 2011-2022 走看看