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