如上图所示,我们要求
f
(
x
)
=
a
0
+
a
1
x
1
+
a
2
x
2
+
a
3
x
3
+
a
4
x
4
+
a
5
x
5
+
a
6
x
6
+
a
7
x
7
f(x)=a_0+a_1x^1+a_2x^2+a_3x^3+a_4x^4+a_5x^5+a_6x^6+a_7x^7
f(x)=a0+a1x1+a2x2+a3x3+a4x4+a5x5+a6x6+a7x7。从其中取八个不同的点,
(
x
i
,
f
(
x
i
)
)
(x_i,f(x_i))
(xi,f(xi)),那么这八个点也可以用来代表这个方程,例如,一次函数可以通过两个点确定,二次函数可以通过三个点确定,7次函数可以通过八个点确定。本文着重理解,不给出证明。如果随便取八点无关的点,那么计算每个点的复杂度为
O
(
n
)
O(n)
O(n),而一共
n
n
n个点,故其复杂度为
O
(
n
2
)
O(n^2)
O(n2)。而如果我们令
w
8
=
1
且
w
4
=
−
1
w^8=1且w^4=-1
w8=1且w4=−1,这在复数域上有解。取
w
0
,
w
1
,
w
2
,
w
3
,
w
4
,
w
5
,
w
6
,
w
7
w^0,w^1,w^2,w^3,w^4,w^5,w^6,w^7
w0,w1,w2,w3,w4,w5,w6,w7,这样一些有关系的点,可以注意到,
w
0
,
w
2
,
w
4
,
w
6
w^0,w^2,w^4,w^6
w0,w2,w4,w6对于
x
4
x^4
x4的值都为1,而
w
1
,
w
3
,
w
5
,
w
7
w^1,w^3,w^5,w^7
w1,w3,w5,w7对于
x
4
x^4
x4的值都为-1。所于对于函数f(x),我们可以利用
1
,
−
1
1,-1
1,−1去把所有大于4次方的削掉,并将要求解的值分为偶数次和奇数次,如上图所示,这个做法的时间为
O
(
n
)
O(n)
O(n),此时它变成两个
3
3
3次函数,可以利用同样的方法再次操作,第一层宽度为8,第二层为4,第三层为2,第四层为1,它们分别对于7次函数,3次函数,1次函数,0次函数(即常数),共需计算
l
o
g
2
(
8
)
=
3
log_2(8)=3
log2(8)=3层,第一层不用计算。所以复杂度为
n
l
o
g
(
n
)
nlog(n)
nlog(n)。
fft理解-cooley turkey
于 2022-09-04 23:33:58 首次发布