前の人が答えたと思うので、あなたの質問には答えません。私がやろうとしていることは、FFT の目的を説明しようとすることです。
まず、FFT は 2 つのベクトル間の畳み込みを計算する方法です。つまり、x = と y= が 1xn ベクトルであるとすると、x と y の畳み込みは次のようになります。
\sum_{i=0} ^n {xi y{ni}}.
その値を計算することは、幅広いアプリケーションで非常に役立つという事実を受け入れる必要があります。
次に、次のことを検討してください。
2 つの多項式を構成するとします。
A(z) = x0 + x1*z + x2 *z^2 + .. + xn^z^n B(z) = y0 + y1*z + y2 *z^2 + .. + yn^z^n
次に、乗算は
AB(z) = A(z)B(z) = \sum_{i=0} ^ n (\sum_{k=0} ^ i xk*y{ik}) z^i
ここで、内側の合計は明らかに、k の値が異なる場合のサイズが異なる畳み込みです。
これで、強引な方法で n^2 時間で AB の係数 (畳み込み) を明確に計算できます。
しかし、私たちはもっと賢くなることもできます。次数 n の任意の多項式は、n+1 点で一意に記述できるという事実を考慮してください。n+1 個の点が与えられると、すべての n+1 個の点を通過する次数 n の一意の多項式を構築できます。さらに、n+1 点の形式で 2 つの多項式を考えます。n+1 の y 値を乗算し、x 値を保持して積を点形式にするだけで積を計算できます。n+1 点形式の多項式が与えられると、それを O(n) 時間で記述する一意の多項式を見つけることができます (実際には、これについてはよくわかりません。O(nlogn) 時間かもしれませんが、それ以上ではないことは確かです。)
これはまさにFFTが行うことです。ただし、多項式 A と B を表す n+1 点を取得するために選択する点は、非常に慎重に選択されています。いくつかの点は確かに複雑です。なぜなら、そのような点を考慮することで多項式を評価する時間を節約できるからです。つまり、FFT が使用する慎重に選択されたポイントの代わりに実際のポイントのみを選択した場合、n+1 ポイントを評価するのに O(n^2) 時間が必要になります。FFT を選択した場合、必要なのは O(nlogn) 時間だけです。FFTについては以上です。ああ、FFT がポイントを選択する方法には、独特の副作用があります。n 次の多項式が与えられた場合、2^m が n 以上の最小の 2 のべき乗になるように m が選択される 2^m 点を選択する必要があります。