Math 计算多项式?

Math 计算多项式?,math,computer-science,Math,Computer Science,为什么使用快速傅里叶变换计算n个点的多项式需要O(n logn)时间?我具体讲的是实现一个分治算法,它将多项式a(x)分为偶次幂和奇次幂,然后使用递归 设T(n)为FFT算法在n个点计算n次多项式的时间 算法分裂 A(x)=xB(x^2)+C(x^2) i、 分成两个多项式:奇偶系数。例如:3x^3+2x^2+9x+7被分成x(3x^2+9)+(2x^2+7) 最初,您希望计算点a、b、c、d处的3x^3+2x^2+9x+7 现在要计算点a2、b2、c2、d2处的3x+9和2x+7。稍后,您将组

为什么使用快速傅里叶变换计算n个点的多项式需要O(n logn)时间?我具体讲的是实现一个分治算法,它将多项式a(x)分为偶次幂和奇次幂,然后使用递归

设T(n)为FFT算法在n个点计算n次多项式的时间

算法分裂

A(x)=xB(x^2)+C(x^2)

i、 分成两个多项式:奇偶系数。例如:3x^3+2x^2+9x+7被分成x(3x^2+9)+(2x^2+7)

最初,您希望计算点a、b、c、d处的3x^3+2x^2+9x+7

现在要计算点a2、b2、c2、d2处的3x+9和2x+7。稍后,您将组合这些值以获得a、b、c、d处的3x^3+2x^2+2x+7值

关键的想法是:由于使用了单位根,a2、b2、c2、d2中有一半的值是相同的。假设a2=c2,b2=d2

所以你需要计算点a2,b2的3x+2和2x+7

这意味着您将大小为N的实例减少为大小为N/2和O(N)后处理的两个实例

FFT递归地重复这个过程。这是与mergesort相同的递归方程,即O(N logn)复杂度。

让T(N)为FFT算法在N点计算N次多项式的时间

算法分裂

A(x)=xB(x^2)+C(x^2)

i、 分成两个多项式:奇偶系数。例如:3x^3+2x^2+9x+7被分成x(3x^2+9)+(2x^2+7)

最初,您希望计算点a、b、c、d处的3x^3+2x^2+9x+7

现在要计算点a2、b2、c2、d2处的3x+9和2x+7。稍后,您将组合这些值以获得a、b、c、d处的3x^3+2x^2+2x+7值

关键的想法是:由于使用了单位根,a2、b2、c2、d2中有一半的值是相同的。假设a2=c2,b2=d2

所以你需要计算点a2,b2的3x+2和2x+7

这意味着您将大小为N的实例减少为大小为N/2和O(N)后处理的两个实例


FFT递归地重复这个过程。这是与mergesort相同的递归方程,即O(N log N)复杂度。

为什么投票关闭?递归将问题从大小N减少到大小N/2和O(N)处理两个问题。所以它是T(n)=2T(n/2)+O(n),这与mergesort,O(n logn)的复杂性相同。这对你来说够了吗?没有分而治之的方法,每次评估都要花费O(n)个时间。您正在计算n个点,因此总时间为O(n)*(n)=O(n^2)。使用“分而治之”将点数除以一半(因为使用了+-n),但每次评估仍需要O(n)个时间。O(n)*(n/2)=O(n^2)。我误解了什么?如果你有兴趣多读一点,科曼算法简介(至少是第二版)详细介绍。如果你想了解这种递归算法的复杂性,你应该研究主定理:为什么投票决定关闭?递归将问题从大小N减少到大小N/2和O(N)处理的两个问题。所以它是T(n)=2T(n/2)+O(n),这与mergesort,O(n logn)的复杂性相同。这对你来说够了吗?没有分而治之的方法,每次评估都要花费O(n)个时间。您正在计算n个点,因此总时间为O(n)*(n)=O(n^2)。使用“分而治之”将点数除以一半(因为使用了+-n),但每次评估仍需要O(n)个时间。O(n)*(n/2)=O(n^2)。我误解了什么?如果你有兴趣多读一点,Cormen的算法简介(至少是第二版)会详细介绍。如果你想了解这种递归算法的复杂性,你应该研究一下主定理:我还建议检查一下“算法简介”(由Cormen等人编写),这是对许多算法的清晰阐述。我还建议检查“算法简介”(由Cormen等人编写),这是对许多算法的清晰阐述。