zoukankan      html  css  js  c++  java
  • 更快的多项式多点求值?

    一个奇妙的科技

    定义卷积矩阵(M=)

    [egin{matrix} a_0&0&0&...\ a_1&a_0&0&...\ a_2&a_1&a_0&...\ ...&...&...&...\ end{matrix}]

    显然,我们把多项式系数(a_0,a_1...)拿下来放到这个方阵中,另一个多项式写成列向量的形式,用此矩阵乘向量即是对另一个多项式模(x^n)意义下的多项式乘法

    幂和矩阵:(A=)

    [egin{matrix} 1&1&1&...\ x_0&x_1&x_2&...\ x_0^2&x_1^2&x_2^2&...\ ...&...&...&...\ end{matrix}]

    多点求值矩阵(B=A^T)

    幂和可以分治FFT,通分即可

    我们把分治FFT的过程拆开来看,我们令(C_i)为分治过程中(i)节点(看成线段树的结构)中所有多项式的乘积(即(prod_{i=l}^r(x-a_i)))(写成方阵的形式)

    幂和矩阵按分治FFT拆开:

    [M_i=M_{2i}C_{2i+1}+M_{2i+1}C_{2i} ]

    (M_i)表示我们幂和通分后只考虑(lsim r)(a_j)时的分子的多项式(写成方阵的形式),叶节点的(M_i)就是常数多项式(F(x)=1)对应方阵

    (A=QM_1),Q是逆元多项式写成的卷积矩阵

    我们把幂和的n个变量写成列向量x的形式

    (Ax)则是幂和的答案

    然后一步神仙操作,我们发现幂和多项式的转置就是多点求值多项式,于是(A^Tx)是我们要的

    我们有((AB)^T=B^TA^T)

    直接整个转置即可(把分治FFT的过程全反过来)

    这时我们把矩阵展开,重新写成多项式,卷积多项式矩阵的转置乘向量写成卷积形式就是差卷积

    只要求一次逆即可

    复杂度依然(O(nlog^2n)),可以5e5多点求值~~~

  • 相关阅读:
    hystrix(3) 熔断器
    hystrix(2) metrics
    hystrix(1) 概述
    ribbon源码(6) Server
    ribbon源码之客户端
    ribbon源码(4) 载均衡算法
    java虚拟机5 字节码
    spring mvc(5) HandlerAdapter
    spring mvc(4) HandlerMapping
    spring mvc(3) DispatcherServlet
  • 原文地址:https://www.cnblogs.com/invisible-eyes/p/13021072.html
Copyright © 2011-2022 走看看