概要
項間の線形漸化式を持つ数列の第
項から
項までを
の時間計算量で計算するアルゴリズムを説明する。
繰り返し二乗法と多項式の余り付き除算を用いる方法と比べると、定数倍が良いと思われる。
問題設定
が
を満たすとする。
この記事内で多項式の除算をしたら、形式的ローラン級数体 上で考えているものとする。
これは形式的冪級数環
と概ね同じだが、
のように負の指数の項も有限個持ってよいとするものである。
アルゴリズムの大枠
maspy による記事 [多項式・形式的べき級数](3)線形漸化式と形式的べき級数 | maspyのHP の議論から、以下の事実が分かる。
の
以降の係数を並べた数列の母関数は、
次未満の多項式
を用いて
と表される。
である。
これを用いて、以下のように計算する。
-
を母関数とする数列の第
項を計算する (後述)。
- これに
を掛けることで、
の場合の
が求まる。これは
である。
-
より
が分かる。
- FPS の逆元を計算するアルゴリズムを用いて
を計算すれば、元の数列の第
項以降を好きなだけ計算できる。
の
から
までの係数の計算
とすると、
の
から
までの係数を求めればよい。
の場合
より
であり、それ以外は
となる。
の場合
と置き、再帰的に
の
から
までの係数を求める。
すると
の
から
までの係数が求まる。
奇数次の係数は必ず
になるから、
から
までの係数が求まったことになる。
ここに
を掛けることで、
の
から
までの係数が求まる。
の場合
と置き、再帰的に
の
から
までの係数を求める。
すると
の
から
までの係数が求まる。
偶数次の係数は必ず
になるから、
から
までの係数が求まったことになる。
ここに
を掛けることで、
の
から
までの係数が求まる。
これで、時間計算量が のアルゴリズムが得られた。
になった時点で再帰を打ち切り FPS の逆元を計算するアルゴリズムを適用するようにすれば、
とすることもできる。
また、詳細は省略するが、アルゴリズム中の様々な畳み込みは DFT の性質を利用して定数倍高速化できる。
例えば、 の DFT が分かっているとき
の DFT を
の時間計算量で計算することができる。
本記事のアルゴリズムと関連するアルゴリズム群: メモ: Bostan-Mori 法で計算できるものまとめ - noshi91のメモ