Algorithm 给定所有根,如何在时间上比O(n^2)更快地找到多项式的系数?

Algorithm 给定所有根,如何在时间上比O(n^2)更快地找到多项式的系数?,algorithm,Algorithm,给定一个多项式的所有根,我必须找出一个比O(n^2)更快生成系数的算法。我很难解决这个问题。我很确定我应该使用快速傅里叶变换或逆傅里叶变换的概念,但我不知道如何修改输入,使其不是单位的第n个根。有人能给我指出正确的方向吗?这里有一个O(n*(log n)^2)解决方案: 基本情况:对于一个根a,答案就是x-a 假设我们有一个包含多个根的列表。我们可以递归地解决列表的前半部分和后半部分的问题,然后使用快速傅立叶变换将结果相乘 时间复杂度是从方程T(n)=2*T(n/2)+O(n logn)得到的,

给定一个多项式的所有根,我必须找出一个比O(n^2)更快生成系数的算法。我很难解决这个问题。我很确定我应该使用快速傅里叶变换或逆傅里叶变换的概念,但我不知道如何修改输入,使其不是单位的第n个根。有人能给我指出正确的方向吗?

这里有一个O(n*(log n)^2)解决方案:

  • 基本情况:对于一个根a,答案就是x-a

  • 假设我们有一个包含多个根的列表。我们可以递归地解决列表的前半部分和后半部分的问题,然后使用快速傅立叶变换将结果相乘


  • 时间复杂度是从方程T(n)=2*T(n/2)+O(n logn)得到的,根据主定理,它是O(n*(logn)^2)。

    kraskevich基本上确定了这一点。缺少一些详细信息,并且它太长,无法放入注释字段。详情如下

    基本上,您希望将其设置为多项式乘法问题。您的输入将是p1,…pN,其中pj(x)=(x-rj)

    以下是伪代码:

    function multipley2poly(p1,p2)
    //这里,使用FFT、乘法和IFFT返回
    函数多重多项式(p[1],…p[N])
    如果(N==1)返回p[1]
    如果(N==2)返回倍数2poly(p[1],p[2])
    否则{
    返回multiply2Poly(multiplyPoly(p[1],…p[N/2]),multiplyPoly(p[1+N/2],…,p[N])
    }
    函数getCoef(r[1],…r[N])
    
    return multiplyPoly((p[1]=x-r[1]),…(p[N]=x-r[N]);
    我曾想过类似的事情,但我搞砸了递归设置。如果我有四个根,r1,r2,r3,r4,算法基本上是将r1和r2,以及r3和r4的二项式相乘,然后两者的结果都正确吗?1.哪个域?(r,C,…)2.直接为R域编写多项式有什么错,例如:
    root={x0,x1,x2,x3,x4}->polynom(x)=(x-x0)*(x-x1)*(x-x2)*(x-x3)*(x-x4)
    ,所以你只需要用代数方法将它相乘就可以得到系数…3.
    N
    是什么?根的数目?在这种情况下,乘法是O(N^2)…所以可能是FFT多项式乘法。。。