zoukankan      html  css  js  c++  java
  • FFT理解

    近日理解了一下多项式快速乘法,浅谈一下自己的感受;

    用处:在进行多项式乘法时,将O(n2)的复杂度优化到O(nlog2n)的复杂度,而这在一些例如高精度乘法,生成函数的题目中不可或缺;

    具体实现:

    由于多项式在系数表示进行乘法的时候,复杂度为O(n2),在点值表示进行乘法的时候,复杂度为O(n);

    很自然的,我们想到,先设法将系数表示转化为点值表示,在进行完乘法后,再转移回系数表示,而实际算法也是这么做的;

    a:[系数数组]->[点值数组]->

    b:[系数数组]->[点值数组]->乘法->c:[点值数组]->[系数数组]

    所以我们现在要解决的问题是:

    1.系数->点值

    选n个xi,求A(x[i]),由于有秦九韶算法,单次O(n),n次O(n2),boom了;

    考虑对x[i]进行限制,普通的无规律的求A(x[i])自然是要O(n2),但问题是x[i]目前不固定,我们可以自己决定;

    这需要挖掘多项式的一些性质:(比如下面这个)

    A(xi)=次数为偶数的系数数组AL(xi2)+xi*次数为偶数的系数数组AR(x[i]2)

    A(-xi)=次数为偶数的系数数组AL(xi2)-xi*次数为偶数的系数数组AR(x[i]2)

    从这个式子,我们可以清晰地看出,算出AL(xi2),和AR(xi2)可以得到两个点值,这样就可以不断递归,O(nlogn);

    2.点值->系数

    经过数学变换(自己推),可以发现点值与系数的关系式与带入多项式求值的关系式非常相似;

    可以把点值看成多项式的系数,再次FFT,最后即可得到答案;

  • 相关阅读:
    POJ 3160 Father Christmas flymouse (tarjan+spfa)
    HDU 1133 Buy the Ticket
    Problem F: [USACO 3.1.6]邮票
    无向图 割点模板 (转载)
    POJ 2117 Electricity (割点)
    HDU 4337 King Arthur's Knights
    Delphi2010中保存UTF8/Unicode编码文件的问题
    Delphi的泛型学习
    关于Ehlib5中的DBGridEh使用问题
    delphi中的命名空间
  • 原文地址:https://www.cnblogs.com/chadinblog/p/6297580.html
Copyright © 2011-2022 走看看