FFT
多项式的系数表示和点表示
系数表示
f
=
a
0
+
a
1
x
+
a
2
x
2
+
⋯
+
a
n
x
n
f=a_0+a_1 x+a_2 x^2+\cdots+a_{n}x^n
f=a0+a1x+a2x2+⋯+anxn
f
=
{
a
0
,
a
1
,
…
,
a
n
}
f=\{a_0,a_1,\dots ,a_{n}\}
f={a0,a1,…,an}
点表示
在平面上选
(
n
+
1
)
(n+1)
(n+1)个点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),
y
i
=
a
0
+
a
1
x
i
+
a
2
x
i
2
+
⋯
+
a
n
−
1
x
i
n
−
1
y_i=a_0+a_1 x_i+a_2 x_i^2+\cdots+a_{n-1}x_i^{n-1}
yi=a0+a1xi+a2xi2+⋯+an−1xin−1,也可以表示多项式。
多项式乘积
在系数表示下是
O
(
n
2
)
O(n^2)
O(n2),在点表示是
O
(
n
)
O(n)
O(n),
(
x
i
,
f
(
x
i
)
)
×
(
x
i
,
g
(
x
i
)
)
=
(
x
i
,
f
(
x
i
)
×
g
(
x
i
)
)
(x_i,f(x_i))\times (x_i,g(x_i))=(x_i,f(x_i)\times g(x_i))
(xi,f(xi))×(xi,g(xi))=(xi,f(xi)×g(xi))
复变基础
i
2
=
1
a
+
b
i
对
应
复
平
面
上
的
一
个
点
(
a
,
b
)
a
+
b
i
=
l
(
cos
θ
+
i
sin
θ
)
=
l
e
i
θ
i^2=1\\a+bi对应复平面上的一个点(a,b)\\a+bi=l(\cos\theta+i\sin \theta)=le^{i\theta}
i2=1a+bi对应复平面上的一个点(a,b)a+bi=l(cosθ+isinθ)=leiθ
e
i
θ
1
⋅
e
i
θ
2
=
e
i
(
θ
1
+
θ
2
)
e^{i\theta_1}\cdot e^{i\theta_2}=e^{i (\theta_1+\theta_2)}
eiθ1⋅eiθ2=ei(θ1+θ2)
Conjugate
x = a + b i x † = a − b i x ⋅ x † = ( a 2 + b 2 ) = l 2 x=a+bi\\x^\dagger=a-bi\\x\cdot x^\dagger=(a^2+b^2)=l^2 x=a+bix†=a−bix⋅x†=(a2+b2)=l2
单位根
ω
n
n
=
1
→
w
n
=
e
i
2
π
n
\omega_n^n=1\rightarrow w_n=e^{i\frac{2\pi}{n}}
ωnn=1→wn=ein2π
ω
2
n
2
k
=
ω
n
k
,
ω
n
k
+
n
2
=
−
ω
n
k
,
ω
n
a
+
b
=
ω
n
a
ω
n
b
\omega_{2n}^{2k}=\omega_n^k,\omega_n^{k+\frac{n}{2}}=-\omega_n^k,\omega_n^{a+b}=\omega_n^a\omega_n^b
ω2n2k=ωnk,ωnk+2n=−ωnk,ωna+b=ωnaωnb
代入
{
ω
n
0
,
ω
n
1
,
…
,
ω
n
n
−
1
}
\{\omega_n^0,\omega_n^1,\dots,\omega_n^{n-1}\}
{ωn0,ωn1,…,ωnn−1}
多项式,
n
=
2
k
n=2^k
n=2k
f
(
x
)
=
∑
a
i
x
i
=
A
1
(
x
2
)
+
x
A
2
(
x
2
)
A
1
(
x
)
=
a
0
+
a
2
x
+
⋯
+
a
n
−
2
x
n
2
−
1
A
2
(
x
)
=
a
1
+
a
3
x
+
⋯
+
a
n
−
1
x
n
2
−
1
f(x)=\sum a_ix^i=A_1(x^2)+x A_2(x^2)\\ A_1(x)=a_0+a_2x+\cdots +a_{n-2}x^{\frac{n}{2}-1}\\ A_2(x)=a_1+a_3x+\cdots +a_{n-1}x^{\frac{n}{2}-1}\\
f(x)=∑aixi=A1(x2)+xA2(x2)A1(x)=a0+a2x+⋯+an−2x2n−1A2(x)=a1+a3x+⋯+an−1x2n−1
对于k<
n
2
\frac{n}{2}
2n:
f
(
ω
n
k
)
=
A
1
(
ω
n
2
k
)
+
ω
n
k
A
2
(
ω
n
2
k
)
f
(
ω
n
k
+
n
2
)
=
A
1
(
ω
n
2
k
)
−
ω
n
k
A
2
(
ω
n
2
k
)
f(\omega_n^k)=A_1(\omega_n^{2k})+\omega_n^kA_2(\omega_n^{2k})\\ f(\omega_n^{k+\frac{n}{2}})=A_1(\omega_n^{2k})-\omega_n^{k}A_2(\omega_n^{2k})
f(ωnk)=A1(ωn2k)+ωnkA2(ωn2k)f(ωnk+2n)=A1(ωn2k)−ωnkA2(ωn2k)
IDFT
把
y
i
y_i
yi当成系数,把
{
ω
n
0
,
ω
n
−
1
,
…
,
ω
n
−
(
n
−
1
)
}
\{\omega_n^0,\omega_n^{-1},\dots,\omega_n^{-(n-1)}\}
{ωn0,ωn−1,…,ωn−(n−1)}带入再乘上
1
n
\frac{1}{n}
n1,得到系数。
y
i
=
∑
ω
n
i
∗
a
i
a
i
=
1
n
∑
ω
n
−
i
∗
y
i
y_i=\sum \omega_n^i*a_i\\ a_i=\frac{1}{n}\sum \omega_n^{-i}*y_i
yi=∑ωni∗aiai=n1∑ωn−i∗yi