• 卷积计算


        向量$a = (a_0, a_1, ..., a_{n-1})$和$b = (b_0, b_1, ..., b_{n-1})$

        $A(x) = a_0 + a1_x + a_2x^2 + ... + a_{n-1}x^{n-1} $
        $B(x) = b_0 + b_1x + b_2x^2 + .. + b_{n-1}x^{n-1}   $
        $C(x) = A(x)B(x)  = a_0b_0 + (a_0b_1 + a_1b_0)x + ... + a_{n-1}b_{n-1}x^{2n-2} $

        卷积的分量就是$C(x)$的一个系数。卷积$a*b$计算等价于多项式相乘。

         如何快速的进行多项式求值呢?蛮力算法,对应项相乘,$O(n^2)$

    计算2n-1次多项式$C(x)$

    1. 选择值$x_0,x_1,..x_{2n-1}$,求出$A(x_j)$和$B(x_j)$,$j = 0,1,...,2n-1$
    2. 对每个$j$计算$C(x_j) = A(x_j)B(x_j)$
    3. 利用多项式插值法,由$C(x)$在$x = x_0 ,x_1, ..., x_{2n-1}$的值求出多项式$C(x)$的系数

        这三步最终做的是件什么事情呢?就是已知$A(x)$和$B(x)$求出它们的乘积$C(x)$。

        第一步主要是多项式求值,多项式插值法也能通过多项式求值实现(后面会讲),因此,这个算法的关键:一是如何选择$x_0,x_1,..x_{2n-1}$的值?使得后面可用使用插值的方法把多项式的系数求出来;二是找一个高效的多项式求值算法。

    2n个数的选择:1的2n次根

    $$
    egin{aligned}
    omega _j &= e^{frac{2pi j}{2n}i} = e^{frac{pi j}{n}i} \
    &= cos{frac{pi j}{n}} + i sin{frac{pi j}{n}}, j = 0,1,..,2n-1, i=sqrt{-1} \
    end{aligned}$$

    $j$每取一个值得到一个根,这2n个根均匀的分布在单位圆上。

    例如,$n=4$时的8个根分布如下:

  • 相关阅读:
    C语言strcasecmp()函数:判断字符串是否相等(忽略大小写)
    C语言之strrchr函数
    【Android】adb connect 手机的两种方式
    python web框架介绍对比
    sublime text 3 + python配置,完整搭建及常用插件安装
    Sublime text 3 快捷键:
    sublime text3 插件CTags
    sublime text 3 并列显示
    python 保存csv文件
    pandas 读取文件
  • 原文地址:https://www.cnblogs.com/lfri/p/10664441.html
Copyright © 2020-2023  润新知