1
競技数学解説
文献あり

Shift of Sampling Points of Polynomialの実装

183
0

問題

以下のライブラリを実装しようとして、行間がなかなか埋まらなかったので、メモを残します。

以下の問題を 時間計算量 O((N+M)log(N+M)) で解くことを目標とする。

Shift of Sampling Points of Polynomial

次数 N 未満の多項式 f(x) の標本点 f(0),f(1),,f(N1) が与えられます。
i=0,1,,M1 に対して f(c+i)mod998244353 を計算してください。

  • 1N,M524288
  • 0c,f(i)<998244353

( https://judge.yosupo.jp/problem/shift_of_sampling_points_of_polynomial より引用)

ステップ1:下降冪の和で表す

多項式fを、下降冪
xn=i=1n(xi+1)=x(x1)...(xn+1)n
の和で、
i=0Naixi
と表したい。

N次多項式fに対して
f(x)=i=0N(j=0i(1)ij(ij)!j!f(j))xi

左辺も右辺もN次多項式なので、f(0),f(1),,f(N)で一致することを示す。
kN以下の非負整数のとき、
i=0N(j=0i(1)ij(ij)!j!f(j))ki=i=0kj=0i(1)ijj!(ij)!k!(ki)!f(j)=j+m+n=k(1)mk!j!m!n!f(j)
ここで
m+n=k(1)mm!n!=1k!m+n=kkCn(1)n(1)m=1k!(11)k={1k!(k=0)0(k>0)
なので
j+m+n=k(1)mk!j!m!n!f(j)=f(k)
よって、
i=0N(j=0i(1)ij(ij)!j!f(j))ki=f(k)

畳み込みで計算するためには、

xi={f(i)i!(0iN)0()yi={(1)ii!(0iN)0()(xy)i=j=0i(1)ij(ij)!j!f(j)

とすればよい

ステップ2:シフトを計算する

次に、二項定理の下降冪版を示す。

下降冪の二項定理

(x+y)n=i=0nnCixiyni

nについての帰納法で示す。
n=0のとき、(x+y)0=1=0C0x0y0で成立
(x+y)n=i=0nnCixiyniを仮定すると、
(x+y)n+1=(x+y)n(x+yn)=i=0nnCixiyni((xi)+(y(ni)))=i=0nnCixi+1yni+i=0nnCixiyni+1=i=0n+1nCi1xiyn+1i+nCixiyn+1i=i=0n+1n+1Cixiyn+1i
よって示された。

畳み込みによるシフト

f(x)=i=0Naixi
xi={ai(i!)(0iN)0()yi={cNi(Ni)!(0iN)0()
のとき、
f(x+c)=i=0N(xy)N+ii!xi

f(x+c)=n=0Ni=0nann!i!(ni)!cnixi=i=0Nn=iNann!i!(ni)!cnixi=i=0Nxii!n=iNann!cni(ni)!=i=0Nxii!n=iNann!cni(ni)!
ここで、
xi={ai(i!)(0iN)0()yi={cNi(Ni)!(0iN)0()(xy)N+i=n=iNann!cN(N+in)(N(N+in))!=n=iNann!cni(ni)!
なので、
f(x+c)=i=0N(xy)N+ii!xi

ステップ3:各点数値表現に戻す

これでシフトを計算できたので、あとは下降冪表現から0iNでの値の表現に戻せば良い。

f(x)=i=0Naixi
のとき、0nに対して
f(n)=n!i=0min(n,N)ai(ni)!
また、これは畳み込みで計算できる。

f(n)=i=0Naini=i=0min(n,N)aini(n<ini=0)=i=0min(n,N)ain!(ni)!=n!i=0min(n,N)ai(ni)!

0nMの部分を畳み込みで計算するためには、

xi={ai(0iN)0()yi={1i!(0iM)0()(xy)i=i=0min(n,N)ai(ni)!

とすればよい。

まとめ

次数 N 未満の多項式 f(x) の標本点 f(0),f(1),,f(N1) が与えられたとき、
i=0,1,,M1 に対して f(ci)mod998244353 を時間計算量 O((N+M)log(N+M))で計算できる。

長さNの列と長さMの列の畳み込みは高速フーリエ変換した空間で掛け算をすることにより、O((N+M)log(N+M))で計算できる。
ステップ1と2は長さNと長さN、ステップ3は長さNと長さMの列を畳み込むので、
それぞれ上の計算量で計算でき、全体もO((N+M)log(N+M))で計算できる。

参考文献

投稿日:2022714
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. ステップ1:下降冪の和で表す
  2. ステップ2:シフトを計算する
  3. ステップ3:各点数値表現に戻す
  4. まとめ
  5. 参考文献