Algorithm 给定所有根,如何在时间上比O(n^2)更快地找到多项式的系数?
给定一个多项式的所有根,我必须找出一个比O(n^2)更快生成系数的算法。我很难解决这个问题。我很确定我应该使用快速傅里叶变换或逆傅里叶变换的概念,但我不知道如何修改输入,使其不是单位的第n个根。有人能给我指出正确的方向吗?这里有一个O(n*(log 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)得到的,
时间复杂度是从方程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多项式乘法。。。