3. 畳込み
ちょうど 円になる組合せの数を とすると, 主菜で
円の物を選んだ時, 副菜として 円の物を選べばよ
く,
となる. 但し, とおく.
k Ck i
k − i
=Ck
∑
i=0
k
Ai Bk−i
= = 0A0 B0
このような を, と の畳込み (convolution) という.C A B
4. 畳込みから多項式乗算へ
ここで, , を係数とする多項式
を考えると, その積は
で定まる.
A B
g(x) = ,
∑
i=0
N
Ai x
i
h(x) =
∑
j=0
N
Bj x
j
(g ∗ h)(x) = g(x) ∗ h(x)
=
∑
i=0
N
∑
j=0
N
Ai Bj x
i+j
5. 畳込みから多項式乗算へ
ここで, とおいて
を書きなおすと,
i + j = k
(g ∗ h)(x) =
∑
i=0
N
∑
j=0
N
Ai Bj x
i+j
(g ∗ h)(x) =
( )
∑
k=0
2N
∑
i=0
k
Ai Bk−i x
k
=
∑
k=0
2N
Ck x
k
となるから, この が計算出来ればよい.(g ∗ h)(x)
6. 多項式乗算
を高速に求めたい.(g ∗ h)(x)
普通に書くと, こんな感じで .O (deg(g) ∗ deg(h))
def multiply(g, h):
f = [ 0 for _ in range(len(g) + len(h) 1) ]
for i in range(len(g)):
for j in range(len(h)):
f[i+j] += g[i] * h[j]
return f
9. 点の選び方
実際には, が の冪乗になるようにし, と
しては の 乗根全体を選ぶ.
n 2 , …,x0 xn−1
1 n
つまり, として, とする.= exp(2π /n)ζn −1‾‾‾√ =xi ζi
n
10. の性質ζn
には, 次の性質がある.= exp(2π /n)ζn −1‾‾‾√
.
"直交性" が成り立つ. すなわち,
(最後の は, 等比級数の和の公式から.)
= ⇔ i = j mod nζi
n ζj
n
=
∑
i=0
n−1
( )ζj
n
i
( )
ζk
n
⎯ ⎯⎯⎯⎯⎯ i
∑
i=0
n−1
ζi(j−k)
n
=
{
n, if j = k mod n,
0, otherwise.
= 0
を で置き換えても, これらの性質は変わらない.ζn ζ−1
n
11. 離散フーリエ変換
前述の通り, として, 評価と補間をする. こうする
と, 何がよいのかを見ていこう.
=xi ζi
n
多項式 に対し, を
で定める. つまり, 評価した各点での値を係数に持つ多項
式である.
f (x) (t)fˆ
(t) = f ( )fˆ
∑
i=0
n−1
ζi
n t
i
これを, の離散フーリエ変換 (Discrete Fourier
Transformation, DFT) と呼ぶ.
f
12. 離散フーリエ変換
とすると,f (x) = ∑n−1
j=0
cj x
j
(t)fˆ = f ( )
∑
i=0
n−1
ζi
n t
i
=
(
(
)
∑
i=0
n−1
∑
j=0
n−1
cj ζi
n )
j
t
i
= ( t
∑
j=0
n−1
cj
∑
i=0
n−1
ζj
n )
i
14. 離散フーリエ逆変換
よって, の DFT
から,
と, を で置き換えた DFT で を復元出来る. こ
れを, 離散フーリエ逆変換と呼ぶ.
f
(t) = f ( )fˆ
∑
i=0
n−1
ζi
n t
i
f (x) = ( )
1
n ∑
i=0
n−1
fˆ ζ−i
n x
i
ζn ζ−1
n f (x)
15. 積の離散フーリエ変換 (DFT)
さて, "多項式を評価した値" を係数としたのだから当然
ではあるが, は,
と, と の係数毎の積で求められる.
(t)g ∗ hˆ
(t)g ∗ hˆ = (g ∗ h)( )
∑
i=0
n−1
ζi
n t
i
= g( )h( )
∑
i=0
n−1
ζi
n ζi
n t
i
gˆ hˆ
19. 高速フーリエ変換
の冪乗 と 次以下の多項式
に対し,
とすると,
で, , はそれぞれ 次以下の多項式.
2 n n − 1 f (x) = ∑n−1
i=0
ci x
i
(x)f0
(x)f1
= = + + + …,
∑
i=0
n/2−1
c2i x
i
c0 x
0
c2 x
1
c4 x
2
= = + + + …∑
i=0
n/2−1
c2i+1 x
i
c1 x
0
c3 x
1
c5 x
2
f (x) = ( ) + x ( )f0 x
2
f1 x
2
f0 f1 n/2 − 1
20. 高速フーリエ変換
を求めるには,fˆ
f ( ), f ( ), …, f ( )ζ0
n ζ1
n ζn−1
n
を求められればよかったが, だ
から,
f (x) = ( ) + x ( )f0 x
2
f1 x
2
( ), ( ), …, ( ),f0 ζ0
n f0 ζ2
n f0 ζ2(n−1)
n
( ), ( ), …, ( )f1 ζ0
n f1 ζ2
n f1 ζ2(n−1)
n
を求めればよい.
21. 高速フーリエ変換
だから,
= exp (2 ∗ 2π /n) = exp (2π /(n/2)) =ζ2
n −1‾‾‾√ −1‾‾‾√ ζn/2
( ), ( ), …, ( ),f0 ζ0
n f0 ζ2
n f0 ζ2(n−1)
n
( ), ( ), …, ( )f1 ζ0
n f1 ζ2
n f1 ζ2(n−1)
n
は,
( ), ( ), …, ( ),f0 ζ0
n/2
f0 ζ1
n/2
f0 ζn−1
n/2
( ), ( ), …, ( )f1 ζ0
n/2
f1 ζ1
n/2
f1 ζn−1
n/2
と同じ.