

hotman78
hotman78 is a Competitive Programmer and Waseda University student.
- 2023-01-04
Relaxed Convolution(Online FFT)によるexp/inv/log/sqrt/pow 【備忘録】
初めに
この記事ではあくまでも時間計算量のオーダーのみを考慮しているため、定数倍についての保証はありません。
relaxed convolution とは
で多項式の積を計算するオンラインアルゴリズムです。Online FFT と呼ばれる事もありますが、Relaxed Convolution の方が使われていそうだったのでこちらで統一します。
このアルゴリズムを使うことで形式的べき級数の / / 等も出来ます。
relaxed convolution のやり方
Kiri さんのわかりやすい解説があったのでここでは割愛させて下さい

積分のやり方
の 項目は、 の 項目に をかけた物なので、一つ前の項を保存しておけば出来ます。
exp(f) のやり方
とおくと、
より、 の 項目までと、 の 項目までを relaxed convolution にて掛け合わせる事で出来ます。
verify : https://judge.yosupo.jp/submission/119568
relaxed convolution を高々定数項だけずらす拡張
の 項目まで、 の 項目までをかけ合わせたものの 項目までを手に入れることが出来ます。
()、 () とおくと、
と に関しては高々定数項しかないため前半 3 項は愚直に計算しても計算量はボトルネックとなり得ません。
また、 の場合、 の 項目は の 項目であることから、 と を relaxed convolution で掛け合わせる事で の 項目まで手に入り、
これにより の 項目までを手に入れる事が出来ました。
これは Kiri さんのブログの図の左上ののマスを増やしたと考えると直感的に理解出来るかと思います。
また、f と g の項数が高々定数個ずれる場合、小さい方に合わせてあげれば良いです。
inv のやり方
とおくと、 であることから、
を前章の拡張を用いて計算する事で の 項目を求める事が出来ます。
verify : https://judge.yosupo.jp/submission/119569
log のやり方
とおくと、 であることから前章までの内容を用いて計算することが出来ます。
(23/01/08/9:53 追記) とおくと となり、これは inv とほぼ同様に処理出来るので一回の relaxed convolution で行う事も出来ます。
verify : https://judge.yosupo.jp/submission/119575
sqrt のやり方
の初項を非零に限定すると、 とおくと、 であることから inv の章と同様に一つだけ項数をずらすことで出来ます。
初項が零の時はそもそも 項目までの情報から 項目までに非零が存在するかを知り得ないので定義から難しそうです。
(そもそも形式的冪級数の sqrt は定数項 1 を前提とするのが一般的という話もあります)
verify : TODO
pow のやり方
を使えば出来ます。
例の如く の適用条件等に注意する必要があります。
verify : TODO
その他
分割統治法を用いたアルゴリズムとの併用など様々なアルゴリズムが考えられそうです。