Schönhage–Strassenの乗算アルゴリズムの変換が安価なのはなぜですか?


8

Schönhage-Strassenの乗算アルゴリズムは、サイズの乗算を回すことによって動作しますN サイズの多くの乗算に lg(N)数論変換と再帰を使用します。少なくとも私はそれがそうであると思います。他にいくつかの賢さがあるからです。正確に要約するのに十分理解していません。それで終わりますO(Nlg(N)lg(lg(N))) 時間。

数論変換は、有限体で行われることを除いて、離散フーリエ変換とまったく同じです。F2N+1 整数を法として 2N+1。これにより、フーリエ変換には1の根の乗算が多くなるため、演算が大幅に安価になります。F2N+1の結束のルーツはすべて2の累乗なので、シフトするだけです!また、整数は、浮動小数点の複素数よりもはるかに扱いやすいです。

とにかく、私を混乱させるのは F2N+1とても大きいです。からランダムな要素を与えるとF2N+1、 それはとります O(N)それを指定するビット。したがって、2つの要素を追加するにはO(N)時間。そして、DFTは多くの追加を行います。

Schönhage–Strassenは入力を Nlg(N) とのグループ lg(N)ビット。これらのグループは、F2N+1それが変形することを。DFTの各パスにはO(Nlg(N)) 足し算/引き算、そして O(lg(Nlg(N)))パス。だから加算加算に基づいてO(N) これらのすべての追加のコストは O(NNlg(N)lg(Nlg(N)))、これは漸近的に同じです O(N2)

それより少し上手くいくことができます...値が非常に小さいため、追加は非常にまばらです。最初のパスの追加は本当にコストがかかりますO(lg(N)) それぞれ、2番目のパスのコスト 21O(lg(N)) それぞれ、およびi番目のパスのコスト O(min(N,2ilg(N))) それぞれ、しかしそれでもすべてがひどい N2lg(N)

Schönhage–Strassenは追加を安くしていますか?全体の費用はいくらですか?

アルゴリズムが実際に使用しているためですか FN+1 (と N2の累乗であることが保証されていますか?十分な積み重ねがあります22nそして、私は本当にわからないという論文のドイツ語。一方で、それがうまくいくための十分な単一性の根が保証されるとは思いません。


ウィキペディアの記事を読みましたか?少なくとも、ドイツ語ではありません。ウィキペディアによれば、サイズはNnN それ以来うまくいく各ステップで n2=Θ(N)
Yuval Filmus 14

@Yuvalどこを見ますか nN記事の中で?「プリミティブルート」はたくさんあり、平方根を含む追加の最適化トリックがありますが、それ以外の場合は表示されません。「各入力番号をXとYのベクトルに分割します。2k 各パーツ、場所 2k Nを割ります。 "の定義はありません k
Craig Gidney 14

@ユヴァルそれは役立つようです...しかし、まだあります O(N) 各原価計算でのパスごとの追加 O(N)。だからパス費用O(N32)、これは良いですが十分ではありません。
Craig Gidney、2014

1
の設定 k 「入力を分割する最適なピースの数は、 N。」の価値 n 次に 2Θ(N)+1なので、各追加コスト O(N)
Yuval Filmus 14

回答:


5

ウィキペディアの記事によると、各ステップで整数の長さはN に(大まかに) N、および(おおよそ) N それらのうち、追加はコストのみ O(N)。リンクされたセクションの最後の段落に実行時間の詳細な分析があり、変更された場合にここにコピーされます。

再帰的なステップでは、次のような観測が使用されます。

  • 入力ベクトルの各要素は最大で N/2k ビット;
  • 任意の2つの入力ベクトル要素の積は最大で 2N/2k ビット;
  • たたみ込みの各要素は、多くても 2k そのような製品、したがって超えてはなりません 2N/2k+k ビット。

ここに N は現在の入力長であり、 k=Θ(N)。算術はモジュロで行われます2n+1、 どこ n の倍数です 2k より大きい 2N/2k+k; ご了承くださいn=Θ(N)


畳み込みの各要素が超えられない理由がわかりません 2N2k+kビット。シフトなしでそれらを一緒に追加した場合、それらはそれ以下になることを理解していますが、F2N+12の巨大な累乗でスケーリングしますか?のNたたみ込みの '番目の要素は i=0Nxi2iN、パワーアップ N 要素ごとに、それでそれらのビットをオーバーラップすることから利益を得ることに失敗せず、 Nビット?
Craig Gidney、2014

追加が行われていますか F2N+1?記事は「再帰的な乗算にはより小さいNを使用する必要がある」と述べていますが、そのステップダウンが変換と点ごとの乗算の両方に対して行われるのか、点ごとの乗算に対してのみ行われるのかは明確ではありません。
Craig Gidney、2014

ウィキペディアの記事が混乱している N そして n; うまくいけば、それは私の修正された回答で修正されています。算術はモジュロで行われます2n+1、 どこ n=Θ(N)。次に、結果のベクトルを組み合わせて、モジュロ2N+1
Yuval Filmus 14

繰り返しますが、コツは、サイズがピースのサイズと互換性のある、より小さな係数を法として算術を実行することです。のNビット整数は大まかに切り分けられます N 長さの断片 Nビット。
Yuval Filmus 14

ああ、それはその時それを説明します。それはlg(n) バージョンも非常に高速です。 lg(n)サイズの操作。あなたの答えでそれを明確に言うことができればそれは素晴らしいでしょう。
Craig Gidney 14

3

進行中にフィールドのサイズがどのように減少するかなど、GMPのドキュメントに正確に何が起こっているかについての優れた説明があります:15.1.6 FFT乗算

より理論的に詳細な概要は、Modern Computer Arithmetic(pdf)の 55ページから始まります(まあ...ブラウザーは71ページと表示していますが、ページ自体は55ページと表示しています)。アルゴリズムの正確性を説明し、複雑さの分析を分析します。

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