離散フーリエ変換の計算の複雑さ?


18

n個の整数のベクトルの標準離散フーリエ変換を計算する複雑さ(標準整数RAM上)は?n

CooleyとTukey に不適切に起因する[1] 高速フーリエ変換の古典的なアルゴリズムは、通常O n log n 時間で実行されると説明されています。ただし、このアルゴリズムで実行される算術演算のほとんどは、(ほとんどの場合n)非合理的な単位の複雑なn番目のルートから始まるため、一定時間での正確な評価は合理的ではありません。ナイーブO n 2)-時間アルゴリズム(団結の複雑な根のヴァンダーモンド行列を掛ける)でも同じ問題が発生します。O(nlogn)nnO(n2)

DFTの出力を(有用な形式で)正確に表現する方法すら明確ではありません。つまり、DFTの計算が実際に可能かどうかは明らかではありません。

したがって、各出力値に必要な精度はビットのみであるとします。 nbの関数としての離散フーリエ変換の計算の複雑さは何ですか? (具体的には、n2の累乗であると仮定してください。)bnbn2

または、文献の「FFT」のすべてのインスタンスは、実際には「高速数論変換」を意味しますか?[2]

ガウス消去法ユークリッド最短経路の複雑さに関する私の関連する質問を参照してください。

[1]ガウス・ルンゲ・ケーニヒ・イェイツ・スタンプ・ダニエルソン・ランチョス・クーリー・テューキーのアルゴリズムと呼ばれるべきです。

[2]もしそうなら、ほとんどの教科書が複素数アルゴリズムのみを説明しているのはなぜですか?


1
私はそれが彼のポイントだと思います:理論的にはについて心配する必要はありませんが、実際の実装では、それと発生する可能性のあるエラーについて心配する必要があります。b
スレシュヴェンカト

1
実際、これは、精度の追加ビットごとに信号強度にを追加する(2倍する)良い質問です。したがって、中間語のサイズを拡張できる場合、質問は最も役立つと思います!3dB2
vs

3
計算可能な分析では、これと関連する質問が考慮されています。 この論文は、WeirauchのタイプIIの有効性の枠組み内でのフーリエ変換の計算のための複雑さの限界を生み出します。限界は、(無限の実数値の)入力の表示において線形であるということです。このシステムでは、入力と出力の両方が精度パラメーターによって定義されているため、これをRAMモデルに変換する方法があるかもしれません。
アーロンスターリング

3
Schönhageand Strassenの整数乗算に関する論文の方法Aをご覧ください。制限された精度の複素フーリエ変換を使用します。Knuth Vol。にも記載されていると思います。2.
マーカス・ブレザー

2
アーロン、マーカス:回答に変換しますか?
Suresh Venkat

回答:


9

この答えは、長整数の乗算のためのシェーンハーゲとストラッセンによる最初のアルゴリズム(「方法A」)の分析の変形です。

長さ FFTを計算したいとします。すべての値が1より小さくなるように入力をスケーリングします。まず、mビットの固定小数点演算(2進小数点の後のmビット)で計算すると仮定します。ましょうδが= 2 1 / 2 - mは少なくとも位置( "複合")単位です。してみましょうω = EXP 2 π I / K K=2kmmδ=21/2mω=exp(2πi/K)

1)|のような 近似計算できますω " J - ω J | 2 K - 1 δすべてについて0 J K - 1。これは時間O K M m で実行できます。ここで、M m mビット数を乗算するのに必要な時間です。(Knuth Vol。2、3rd ed。、309ページを参照)。ωj|ωjωj|(2k1)δ0jK1O(KM(m))M(m)m

M(m)=O(mlogm)M(m)=O(m)mmO(logm)

a=b+ωjcma=truncate(b+ωjc)bcϵa2ϵ+2kδ

(2k1)2kδbmk+logk+b+O(1)

O(KkM(k+b))

これは浮動小数点数でも動作するはずです。1)固定小数点演算でも実行できます、2)浮動小数点数でも同様です。


O(k+b)O(k+b)O(K(k+b))


O(nlog2n)

O(nlogn)O(k+b)

2
bO(logn)O(nlogn)M(O(logn))=1

「アルゴリズムの設計と分析」に関するAho、Hopcroft、およびUllmanの本を偶然見て、ビットモデルのアルゴリズムと関連する問題をある程度詳しく説明しています。
チャンドラチェクリ

しかし、私が覚えている限り、彼らはビットモデルの「数論的FFT」についてのみ議論しています。
マルクスブレーザー

8

これは完全な答えではありませんが、関連する論文をいくつか紹介し、文献から特定の質問に対する答えを抽出することがそれほど簡単ではない理由を部分的に説明することもできます。

質問から始めましょう。なぜこの質問の答えを知りたいですか?通常、この種の問題を気にかけている人は、実際のアプリケーションに高性能FFTを実際に実装することに直面している人です。このような人々は、特定のハードウェアおよびソフトウェアの制約の下でパフォーマンスを最大化することよりも、理想的な計算モデルの漸近的な複雑さについて気にしません。たとえば、西の最速フーリエ変換の開発者は、彼らの論文に次のように書いています。

最適な選択は、レジスタ数、命令のレイテンシとスループット、キャッシュのサイズと結合性、プロセッサパイプラインの構造などのハードウェアの詳細に依存します。

これらは通常、理論家が手を汚したくない問題ですが、実際の実装では非常に重要です。理論家が「RAMモデルで絶対的な最良の漸近ビットの複雑さを見つけた」と宣言した場合、開業医は「それは素晴らしい」と言うかもしれませんが、そのような理論的な結果は自分の目的には役に立たないかもしれません。

そうは言っても、あなたの最善の策は数値解析の文献を見ることだと思います。たとえば、TascheとZeunerは、FFTアルゴリズムの数値安定性を詳しく調べました。実務家の間の一般的なコンセンサスは、与えられた量の数値精度を達成するために、最良の実用的なアプローチは「回転因子」と呼ばれる特定の数値を高精度に事前計算することであると思われるため、これはまだあなたが望むものではないかもしれません。FFTを1つだけ実行している場合、多数のFFT計算に対して1回限りの事前計算のコストを償却することができないため、これは最速のアプローチにはなりません。それでも、最悪の場合の丸め誤差の分析は、あなたの質問に関連するはずです。


11024100

1
私は、正確で正直な奨学金のために、純粋に理論的な質問として興味があります。それ以外の場合は純粋に組み合わせアルゴリズムの途中で「そしてここでは誰もが知っているようにO(n log n)時間で実行するFFTを使用する」を読むことは非常に一般的です。 )-ビット整数演算。実際、FFTのわずかな変形を使用してO(n log n)の時間で整数の畳み込みを実行できる場合、これはおそらく許されますが、まだずさんです。そうでない場合、アルゴリズムを実装しようとする貧弱なシュマックは、間違った答えを得ようとしています。
ジェフ

そしてもちろん、私の質問への答えが実際にどんな影響を与えるとは期待していません。
ジェフ

2
ジェフは、正直な奨学金に関する限り、FFTがO(n log n)リング操作を必要とすると言うだけでは十分ではありませんか?これは、FFTアルゴリズムの複雑さを測定する自然な方法です。すべてを特定の計算モデルに変換する動機はありません。精度のビット数を追跡​​することが重要である場所を証明しようとしている定理はありますか?あなたの貧しいシュマックに関しては、彼が「間違った答え」を得るとは思わない。実際の実装では、ここで尋ねている質問が支配的な関心事になることはほとんどありません。
ティモシーチャウ

O(nlogn)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.