feature image

2024年8月26日 | ブログ記事

低次多項式の合成冪

はじめに

こんにちは。 22B の noya2 です。

私の誕生日である 6/28 に開催した yukicoder contest 435G 問題 で次のような出題をしました:

を求めよ( 回合成 )

以下、多項式や形式的冪級数(FPS)は として 上で考えるものとします。

最近のことですが、 次多項式 に対して、合成 の計算が 時間で計算できることが発明されました[1]。このアルゴリズムと繰り返し二乗法をあわせれば、 時間で計算できるということになります。本記事は 時間で計算する方法を提示します。また、中身が に限らない場合の拡張を示します。

重要になるのは次の等式です。ここで は関数の合成で、 です。

両辺はいずれも に等しいです。このように合成冪は右合成と左合成を考えることによって非自明な式が得られることがあります。低次多項式の通常の冪 は、両辺を微分して非自明な式 を得ていたことを思い出してください[2]。これを の微分方程式とみなし、適切な初期条件をもとに の係数を低次から順に計算できたのでした。計算量が に依存しないという特徴もありました。これを踏まえて、同様に計算できないかを考えましょう。

について と書きます。 とおけば、上の式は

と書くことができます。両辺の の項の係数を比較すると

となります。ここで に注意すると、 は相殺し、次のようになります。 としておきます。

よって、 のとき

に従って の係数を低次から順に計算できます。 から定まっていることに注意してください。

愚直な実装では の計算に 時間かかることになりますが、もともと の係数比較をしていたことを思い出しましょう。誤解を恐れず言えば、結局のところ の計算がオンラインでできればよいということになります。問題設定を明確にしましょう。

の多項式 で初期化されている。 個のクエリをオンラインで処理せよ。 回目のクエリでは が与えられる。 を加算し、 を求めよ。

ではなく を求めるという点で、通常の relaxed-convolution などとは設定が少し異なることに注意してください。先ほどの議論では、 から定まる を比較して を得ていたのでした。つまり、 項先の暫定的な結果を計算しておく必要があったのです。

これを踏まえて、次のような再帰関数 を設計します。 とします。

よくある分割統治FFTなどの実装と異なり、右端の項 を求めない定義になっています。

の動作は次のとおりです。

  1. のときなにもせず、 を返す。
  2. とし、 とする。
  3. から への寄与と から への寄与を計算する。
  4. として を求める。
  5. から への寄与と から への寄与を計算する。
  6. とする。 を返す。

3.を終えた時点で から定まる が計算されていることに注目してください。また、4. で の場合は の結果を使います。

分割統治を行う際の統治部分では、 の寄与を へ送りますが、今回の場合は

という挙動をすることになります。

を呼べば が求められます。 の統治処理は 時間で行えるので、あわせて 時間の計算量で求めることができます。

ここからは、いくつかの拡張(一般化)を見ていきます。

アフィン変換の合成もまたアフィン変換です。行列累乗などで 時間で計算できます。

次以上の非零項が存在し、さらに定数項が非零である場合、上述と同様の手法は通用しません。 とおいて の項の係数に注目すると、左辺は

ですが、これは に依存しています。

そもそも、定数項が非零である多項式やFPSをFPSの中に入れるような合成は、通常は定義できません(すべての項が収束しない)。オンライン合成の文脈でも、項が追加されるたびに、それまで計算した項がすべて更新されることになってしまいます。以下、定数項は であるとして進めます。

となるため、  としてよく、素直な繰り返し二乗法で 時間で計算できます。

例によって とおき、次の方程式を考えます。

この式の を取ると

となります。 に注意すると のとき

と定まります。両辺の から が定まっているため、より単純なオンライン畳み込み、中身が低次多項式のオンライン合成によって、 時間で計算できます。 が入力で与えられる場合は の位数に注意が必要ですが、自然な文脈で出てくる場合は 以外に注意するものはないかもしれません。

多項式が多少高次になる場合でも、 次の係数 が位数の条件を満たせば、同様の手法で計算できます。

です。同様の考察によって、今度は は相殺しますが、 について

を得ます。 のケースをはじめに扱っていたのでした。一般の でも実装はほとんど変わらないでしょう。計算量は変わらず 時間です。

多項式が多少高次になる場合でも、 次の係数が非零である場合は、同様の手法で計算できます。

そろそろ険しくなってきました。

です。同様の考察によって、今度は は相殺しますが、 について

を得ます。より複雑になりますが、 つ先の結果まで計算する分割統治によって実装できると思います。

多項式が多少高次になる場合で、しかも 次の係数が であって 次の係数が である場合でも、 次の係数が非零であれば、なんとかなるというわけです。

例によって とおきますが、上と同様の方法では位数の条件から上手くいきません。そこで 回合成との右合成および左合成を考えましょう。つまり

です。すぐ上に挙げたケース(高次になる場合)に帰着しました。

なお、一般に、 次の係数を としたとき、 となって 次の係数は になるため、 のケースに帰着させることはできません。

一般に、常にではないが漸化式の分母が になるケースです。この場合に対処する方法はわかりませんでした。また、実装が複雑になるくらいなら、そもそも 倍程度の時間をかけて素朴に合成と繰り返し二乗法を使った方が高速なのではないか、とすら思います。情報お待ちしております。

おわり

場合分けが大変になってしまいました。しかも結局のところ すら部分的にしか解けませんでした。残したケースは のケースです。

部分問題として登場した、少し先の項を求めるオンライン畳み込み・低次多項式のオンライン合成は、目新しくて気に入っています。

実は、想定解の実装は、出題時に tester をしてくださった potato167 さんに全てを担当していただきました。本当にありがとうございます。


  1. noshi91 さんによる資料 : https://arxiv.org/abs/2404.05177, https://noshi91.hatenablog.com/entry/2024/03/16/224034 ↩︎

  2. maspy さんによる資料 : https://maspypy.com/多項式・形式的べき級数-高速に計算できるもの#toc45 ↩︎

noya2 icon
この記事を書いた人
noya2

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2023年7月13日
アルゴリズム班はやとき王選手権「競(けい)プロ」を開催しました!
abap34 icon abap34
2021年4月18日
ベズー係数とN項の拡張ユークリッドの互除法
0214sh7 icon 0214sh7
2023年4月29日
CPCTF2023 PPC作問陣 Writeup
noya2 icon noya2
2023年4月21日
CPCTFを開催します
noc7t icon noc7t
2022年8月30日
【競プロer向け】母関数を習得しよう!
tatyam icon tatyam
2021年4月26日
CPCTF2021 作問者writeup by hukuda222
hukuda222 icon hukuda222
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記