zoukankan      html  css  js  c++  java
  • 卷积计算

        向量$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个根分布如下:

  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/lfri/p/10664441.html
Copyright © 2011-2022 走看看