円 分高速フーリエ変換は、 有限体上の 高速フーリエ変換 アルゴリズム の一種です 。 [1] このアルゴリズムは、まず DFT をいくつかの循環畳み込みに分解し、次に循環畳み込みの結果から DFT 結果を導出します。 上の DFT に適用した場合 、このアルゴリズムの乗法の複雑さは非常に低くなります。実際には、特定の長さの循環畳み込みには通常効率的なアルゴリズムが存在するため、このアルゴリズムは非常に効率的です。 [2]
グ
ふ
(
2
メートル
)
{\displaystyle GF(2^{m})}
背景
有限体 上の 離散 フーリエ変換は、 BCHコード や リード・ソロモンコード などの 誤り訂正符号 の復号に広く応用されている 。 複素体 から一般化して、有限体GF( p m )上の数列の離散フーリエ変換は 次のように定義される。
{
ふ
私
}
0
いいえ
−
1
{\displaystyle \{f_{i}\}_{0}^{N-1}}
ふ
じゅう
=
∑
私
=
0
いいえ
−
1
ふ
私
α
私
じゅう
、
0
≤
じゅう
≤
いいえ
−
1
、
{\displaystyle F_{j}=\sum _{i=0}^{N-1}f_{i}\alpha ^{ij},0\leq j\leq N-1,}
ここで は GF( p m ) における 1 のN 乗原始根 である 。 の多項式表現を 次のように
定義すると 、
α
{\displaystyle \alpha }
{
f
i
}
0
N
−
1
{\displaystyle \{f_{i}\}_{0}^{N-1}}
f
(
x
)
=
f
0
+
f
1
x
+
f
2
x
2
+
⋯
+
f
N
−
1
x
N
−
1
=
∑
0
N
−
1
f
i
x
i
,
{\displaystyle f(x)=f_{0}+f_{1}x+f_{2}x^{2}+\cdots +f_{N-1}x^{N-1}=\sum _{0}^{N-1}f_{i}x^{i},}
は単純に である ことが簡単にわかります 。つまり、シーケンスの離散フーリエ変換はそれを多項式評価問題に変換します。
F
j
{\displaystyle F_{j}}
f
(
α
j
)
{\displaystyle f(\alpha ^{j})}
マトリックス形式で記述すると、
F
=
[
F
0
F
1
⋮
F
N
−
1
]
=
[
α
0
α
0
⋯
α
0
α
0
α
1
⋯
α
N
−
1
⋮
⋮
⋱
⋮
α
0
α
N
−
1
⋯
α
(
N
−
1
)
(
N
−
1
)
]
[
f
0
f
1
⋮
f
N
−
1
]
=
F
f
.
{\displaystyle \mathbf {F} =\left[{\begin{matrix}F_{0}\\F_{1}\\\vdots \\F_{N-1}\end{matrix}}\right]=\left[{\begin{matrix}\alpha ^{0}&\alpha ^{0}&\cdots &\alpha ^{0}\\\alpha ^{0}&\alpha ^{1}&\cdots &\alpha ^{N-1}\\\vdots &\vdots &\ddots &\vdots \\\alpha ^{0}&\alpha ^{N-1}&\cdots &\alpha ^{(N-1)(N-1)}\end{matrix}}\right]\left[{\begin{matrix}f_{0}\\f_{1}\\\vdots \\f_{N-1}\end{matrix}}\right]={\mathcal {F}}\mathbf {f} .}
DFT の直接的な評価は 複雑です。高速フーリエ変換は、上記の行列ベクトル積を評価する効率的なアルゴリズムです。
O
(
N
2
)
{\displaystyle O(N^{2})}
アルゴリズム
まず、 GF(p m )
上の 線形多項式を 次のように定義する。
L
(
x
)
=
∑
i
l
i
x
p
i
,
l
i
∈
G
F
(
p
m
)
.
{\displaystyle L(x)=\sum _{i}l_{i}x^{p^{i}},l_{i}\in \mathrm {GF} (p^{m}).}
L
(
x
)
{\displaystyle L(x)}
は線形化されていると言われます 。これは、要素
L
(
x
1
+
x
2
)
=
L
(
x
1
)
+
L
(
x
2
)
{\displaystyle L(x_{1}+x_{2})=L(x_{1})+L(x_{2})}
x
1
,
x
2
∈
G
F
(
p
m
)
,
{\displaystyle x_{1},x_{2}\in \mathrm {GF} (p^{m}),}
(
x
1
+
x
2
)
p
=
x
1
p
+
x
2
p
.
{\displaystyle (x_{1}+x_{2})^{p}=x_{1}^{p}+x_{2}^{p}.}
は体の乗法群の 位数を割り切る必要がある ため、を法 として可逆であること に注目してください 。したがって、要素は を 法として円分剰余類 に分割できます 。
p
{\displaystyle p}
N
{\displaystyle N}
N
{\displaystyle N}
p
m
−
1
{\displaystyle p^{m}-1}
G
F
(
p
m
)
{\displaystyle \mathrm {GF} (p^{m})}
{
0
,
1
,
2
,
…
,
N
−
1
}
{\displaystyle \{0,1,2,\ldots ,N-1\}}
l
+
1
{\displaystyle l+1}
N
{\displaystyle N}
{
0
}
,
{\displaystyle \{0\},}
{
k
1
,
p
k
1
,
p
2
k
1
,
…
,
p
m
1
−
1
k
1
}
,
{\displaystyle \{k_{1},pk_{1},p^{2}k_{1},\ldots ,p^{m_{1}-1}k_{1}\},}
…
,
{\displaystyle \ldots ,}
{
k
l
,
p
k
l
,
p
2
k
l
,
…
,
p
m
l
−
1
k
l
}
,
{\displaystyle \{k_{l},pk_{l},p^{2}k_{l},\ldots ,p^{m_{l}-1}k_{l}\},}
ここで である 。したがって、フーリエ変換の入力は次のように書き直すことができる。
k
i
=
p
m
i
k
i
(
mod
N
)
{\displaystyle k_{i}=p^{m_{i}}k_{i}{\pmod {N}}}
f
(
x
)
=
∑
i
=
0
l
L
i
(
x
k
i
)
,
L
i
(
y
)
=
∑
t
=
0
m
i
−
1
y
p
t
f
p
t
k
i
mod
N
.
{\displaystyle f(x)=\sum _{i=0}^{l}L_{i}(x^{k_{i}}),\quad L_{i}(y)=\sum _{t=0}^{m_{i}-1}y^{p^{t}}f_{p^{t}k_{i}{\bmod {N}}}.}
このように、多項式表現は線形多項式の和に分解され、次のよう に表される。
F
j
{\displaystyle F_{j}}
F
j
=
f
(
α
j
)
=
∑
i
=
0
l
L
i
(
α
j
k
i
)
{\displaystyle F_{j}=f(\alpha ^{j})=\sum _{i=0}^{l}L_{i}(\alpha ^{jk_{i}})}
。
適切な基底で 展開すると 、 となり 、 線形化多項式の性質により 、
α
j
k
i
∈
G
F
(
p
m
i
)
{\displaystyle \alpha ^{jk_{i}}\in \mathrm {GF} (p^{m_{i}})}
{
β
i
,
0
,
β
i
,
1
,
…
,
β
i
,
m
i
−
1
}
{\displaystyle \{\beta _{i,0},\beta _{i,1},\ldots ,\beta _{i,m_{i}-1}\}}
α
j
k
i
=
∑
s
=
0
m
i
−
1
a
i
j
s
β
i
,
s
{\displaystyle \alpha ^{jk_{i}}=\sum _{s=0}^{m_{i}-1}a_{ijs}\beta _{i,s}}
a
i
j
s
∈
G
F
(
p
)
{\displaystyle a_{ijs}\in \mathrm {GF} (p)}
L
i
(
x
)
{\displaystyle L_{i}(x)}
F
j
=
∑
i
=
0
l
∑
s
=
0
m
i
−
1
a
i
j
s
(
∑
t
=
0
m
i
−
1
β
i
,
s
p
t
f
p
t
k
i
mod
N
)
{\displaystyle F_{j}=\sum _{i=0}^{l}\sum _{s=0}^{m_{i}-1}a_{ijs}\left(\sum _{t=0}^{m_{i}-1}\beta _{i,s}^{p^{t}}f_{p^{t}k_{i}{\bmod {N}}}\right)}
この式は、行列形式では と書き直すことができます。 ここで、 は GF( p ) 上の行列で 、 は ブロック対角行列、 は円分剰余類指数に従って の要素を再グループ化する置換行列です 。
F
=
A
L
Π
f
{\displaystyle \mathbf {F} =\mathbf {AL\Pi f} }
A
{\displaystyle \mathbf {A} }
N
×
N
{\displaystyle N\times N}
a
i
j
s
{\displaystyle a_{ijs}}
L
{\displaystyle \mathbf {L} }
Π
{\displaystyle \mathbf {\Pi } }
f
{\displaystyle \mathbf {f} }
正規基底 を使用して の体要素を展開する 場合 、 の i 番目のブロックは 次のように与えられることに注意してください。
{
γ
i
p
0
,
γ
i
p
1
,
⋯
,
γ
i
p
m
i
−
1
}
{\displaystyle \{\gamma _{i}^{p^{0}},\gamma _{i}^{p^{1}},\cdots ,\gamma _{i}^{p^{m_{i}-1}}\}}
G
F
(
p
m
i
)
{\displaystyle \mathrm {GF} (p^{m_{i}})}
L
{\displaystyle \mathbf {L} }
L
i
=
[
γ
i
p
0
γ
i
p
1
⋯
γ
i
p
m
i
−
1
γ
i
p
1
γ
i
p
2
⋯
γ
i
p
0
⋮
⋮
⋱
⋮
γ
i
p
m
i
−
1
γ
i
p
0
⋯
γ
i
p
m
i
−
2
]
{\displaystyle \mathbf {L} _{i}={\begin{bmatrix}\gamma _{i}^{p^{0}}&\gamma _{i}^{p^{1}}&\cdots &\gamma _{i}^{p^{m_{i}-1}}\\\gamma _{i}^{p^{1}}&\gamma _{i}^{p^{2}}&\cdots &\gamma _{i}^{p^{0}}\\\vdots &\vdots &\ddots &\vdots \\\gamma _{i}^{p^{m_{i}-1}}&\gamma _{i}^{p^{0}}&\cdots &\gamma _{i}^{p^{m_{i}-2}}\\\end{bmatrix}}}
これは 巡回行列 です。巡回行列ベクトル積は 畳み込み によって効率的に計算できることはよく知られています。したがって、離散フーリエ変換を短い畳み込みに減らすことに成功しました。
複雑
特性 -2の体GF(2 m )に適用すると 、行列は単なる2元行列になります。 と の行列ベクトル積を計算するときは、加算のみが使用されます。 円分アルゴリズムの乗法計算量は で与えられ 、加法計算量は で与えられること が示されています 。 [2]
A
{\displaystyle \mathbf {A} }
A
{\displaystyle \mathrm {A} }
L
Π
f
{\displaystyle \mathrm {L\Pi f} }
O
(
n
(
log
2
n
)
log
2
3
2
)
{\displaystyle O(n(\log _{2}n)^{\log _{2}{\frac {3}{2}}})}
O
(
n
2
/
(
log
2
n
)
log
2
8
3
)
{\displaystyle O(n^{2}/(\log _{2}n)^{\log _{2}{\frac {8}{3}}})}
参考文献
^ SV Fedorenko および PV Trifonov、 Fedorenko、SV、Trifonov、PV。(2003)「有限体上の高速フーリエ変換の計算について」 (PDF) 。 代数および組み合わせ符号理論に関する国際ワークショップの議事録 : 108–111。
^ ab Wu, Xuebin; Wang, Ying; Yan, Zhiyuan (2012). 「任意の有限体上の円分高速フーリエ変換のアルゴリズムと複雑性について」 IEEE Transactions on Signal Processing . 60 (3): 1149–1158. doi :10.1109/tsp.2011.2178844.