求解迭代列的一些手法

· · 个人记录

例 1

\left\{ \begin{aligned} F_k(x) &= (k - 1) F_{k-1}(x) + (k - 1) x F_{k-2}(x) \\ F_0(x) &= 1 \end{aligned} \right.

给定 c_0, \dots, c_n,求解 \sum_{k=0}^n c_k F_k(x)

将迭代写作矩阵的形式

\begin{pmatrix} F_k(x) \\ F_{k-1}(x) \end{pmatrix} = \begin{pmatrix} k-1 & (k-1)x \\ 1 & \end{pmatrix} \begin{pmatrix} F_{k-1}(x) \\ F_{k-2}(x) \end{pmatrix}

分治计算即可。

时间复杂度 \Theta(n \log^2 n)

例 2

给定 $d_0, \dots, d_m$,对于 $k = 0, \dots, n$ 求解 $\sum_{j=0}^m d_j [x^j] F_k(x)$。 --- 这是上一个问题的转置。 时间复杂度 $\Theta(n \log^2 n)$。 ## 例 3 $F_k(x)$ 的定义同上例。 求解 $F_n(x)$,要求做到 $\Theta(n \log n)$。 --- 我们考虑通过微分方程求解其封闭形式。 一般来说,选择 EGF 或者 OGF 大概需要通过尝试,或是通过组合意义判断。 设 $F(x, t) = \sum_{k\ge 0} F_k(x) \frac{t^k}{k!}$,有 $$ \begin{aligned} F_k(x) &= (k - 1) F_{k-1}(x) + (k - 1) x F_{k-2}(x) \\ \frac{F_k(x)}{(k-1)!} &= \frac{F_{k-1}(x)}{(k-2)!} + x \frac{F_{k-2}(x)}{(k-2)!} \\ [t^{k-1}] (1-t)\frac{\partial}{\partial t} F(x,t) &= [t^{k-1}] xt F(x, t) \\ \frac{\partial}{\partial t} F(x,t) &= \frac{xt}{1-t} F(x, t) \\ F(x, t) &= \mathrm e^{\int \frac{xt}{1-t} \,\mathrm dt} \\ &= C \mathrm e^{x\left(\ln\frac1{1-t}-t\right)} \\ &= \mathrm e^{x\left(\ln\frac1{1-t}-t\right)} \qquad (F(x,0) = 1) \end{aligned} $$ 即得 $[x^j] F_n(x) = \left[\frac{t^n}{n!}\right] \frac{\left(\ln\frac1{1-t}-t\right)^j}{j!}$。 这是一个可以用 Lagrange 反演解决的[经典问题](https://www.luogu.com.cn/blog/NaCly-Fish-blog/a-classical-problem)。借助 Newton 迭代,我们容易在给定的复杂度内解决问题。 ## 例 4 $$ \left\{ \begin{aligned} F_k(x) &= (1+x)(F_{k-1}(x)+x^2F_{k-1}'(x)) \\ F_0(x) &= 1 \end{aligned} \right. $$ 给定 $c_0, \dots, c_n$,求解 $\sum_{k=0}^n c_k F_k(x)$。 --- 现在开始有微分了。 我们先展开为递推式观察,有 $$ F_{k,j} = F_{k-1,j} + jF_{k-1,j-1} + (j-2)F_{k-1,j-2} $$ 不妨对列建立 GF,得迭代 $$ \left\{ \begin{aligned} \widehat F_j(t) &= \frac{jt}{1-t} \widehat F_{j-1}(t) + \frac{(j-2)t}{1-t} \widehat F_{j-2}(t) \\ \widehat F_0(t) &= \frac1{1-t} \end{aligned} \right. $$ 类似例 1,将迭代写作矩阵,然后将分治算法转置即可。 时间复杂度 $\Theta(n \log^2 n)$。 ## 例 5 $$ \left\{ \begin{aligned} F_k(x) &= F_{k-1}'(x) + A(x) F_{k-1}(x) \\ F_0(x) &= B(x) \end{aligned} \right. $$ 其中 $A(x), B(x)$ 为不超过 $m-1$ 次多项式。 求 $F_n(x) \bmod x^m$。 --- 了解一阶线性 ODE 通解的读者可能容易想到做变换 $G_k(x) = \mathrm e^{\int A(x) \,\mathrm dx}F_k(x)$,其中常数取 $0$ 即可。 于是迭代变为 $$ \left\{ \begin{aligned} G_k(x) &= G_{k-1}'(x) \\ G_0(x) &= \mathrm e^{\int_0^x A(t) \,\mathrm dt}B(x) \end{aligned} \right. $$ 可得 $F_n(x) = \mathrm e^{-\int_0^x A(t) \,\mathrm dt} G_0^{(n)}(x)$。 时间复杂度 $\Theta((n+m) \log (n+m))$。 ## 例 6 $$ \left\{ \begin{aligned} F_k(x) &= \frac x{1-x}F_{k-1}'(x) + F_{k-1}(x) \\ F_0(x) &= \frac1{1-x} \end{aligned} \right. $$ 求解 $[x^m] F_n(x)$。$n$ 非常大。 --- 这个迭代并不容易用附加因子的方法来化简,但我们考虑 $G_k(x) = x G_{k-1}'(x) + G_{k-1}(x)$ 的形式是容易解决的。 接下来我们引入另一种手法:换元。EI 叫它**基变换换元**。设 $F_k(x) = G_k(u)$,有 $$ \begin{aligned} G_k(u(x)) &= u(x) G_{k-1}'(u(x)) + G_{k-1}(u(x)) \\ &= \frac{u(x)}{u'(x)} [G_{k-1}(u(x))]' +G_{k-1}(u(x)) \end{aligned} $$ 解 $\frac{u(x)}{u'(x)} = \frac x{1-x}, u(0)=0$ 得 $u(x) = x \mathrm e^{-x}$,我们有 $$ \left\{ \begin{aligned} G_k(u) &= u G_{k-1}'(u) + G_{k-1}(u) \\ G_0(u) &= \frac1{1-(u\mathrm e^{-u})^{\langle-1\rangle}} \end{aligned} \right. $$ 则 $$ \begin{aligned} [x^m] F_n(x) &= [x^m] G_n(u(x)) \\ &= [x^m] \sum_{j\ge 0} (x\mathrm e^{-x})^j [u^j] G_n(u) \\ &= \sum_{j\ge 0} \frac{(-j)^{m-j}}{(m-j)!} [u^j] G_n(u) \\ &= \sum_{j\ge 0} \frac{(-j)^{m-j}(j+1)^n}{(m-j)!} [u^j] G_0(u) \\ \end{aligned} $$ 有显然的 $\Theta(m \log m + m \log_m n)$ 做法。 也可以做到 $\Theta(m + m \log_m n)$,留作读者练习。 ## 例 7 $$ \left\{ \begin{aligned} F_k(x) &= (x^2-1)F_{k-1}'(x) \\ F_0(x) &= x \end{aligned} \right. $$ 给定 $x_0$,求解 $F_0(x_0), \dots, F_n(x_0)$。 --- 运用例 4 的方法,可以在 $\Theta(n\log^2 n)$ 的时间内求解稍微一般一点的问题。 我们考虑继续使用基变换换元。 由于我们通常希望 $\operatorname{ord} u(x)=1$,这次我们的目标应该设为 $G_k(u) = G_{k-1}'(u)$(设为 $G_k(u) = u G_{k-1}'(u)$ 也可以完成推导,但不太符合计算上的直觉)。 求解 $\frac1{u'(x)} = x^2-1, u(0)=0$ 得 $u(x) = \frac12 \ln \frac{1-x}{1+x}$,我们有迭代 $$ \left\{ \begin{aligned} G_k(u) &= G_{k-1}'(u) \\ G_0(u) &= \frac{1-\mathrm e^{2u}}{1+\mathrm e^{2u}} \end{aligned} \right. $$ 记 $u_0 = u(x_0)$,我们希望求得 $G_0(u_0), \dots, G_0^{(n)}(u_0)$。 根据 Taylor 展开,只需求出 $G_0(u+u_0)$ 的前 $n+1$ 项系数即可。若加以整理亦可以得到官方题解中给出的二元 GF 的封闭形式。 时间复杂度 $\Theta(n \log n)$。 ## 结语 经过总结不难发现我们目前对迭代列大致有四种手法: 1. 分治计算矩阵积,亦可结合转置原理。 1. 附加因子化简微分。 1. 基变换换元化简微分。 1. 解(偏)微分方程获得封闭形式。 在解出迭代列后,有时也需要一些别的计算手段(例如:[小 Q 的序列](https://loj.ac/p/6703)使用多点求值),使得这类问题往往难以一眼看穿复杂度(?)。 其中解微分方程的方法,尤其是涉及多个元的偏微分方程,由于分析方法较为深刻,我们通常不会去使用(然而例 7 的官方题解使用了此方法)。 而附加因子与基变换换元的方法也有一些局限:我们难以准确地选择合适的方法将问题改写为迭代列形式,有时需要一定的尝试和组合观察。 事实上,这类问题蕴含的内涵仍然十分深刻,笔者也仅能(在 EI 的帮助下)窥其一二。 ## 参考资料 1. [那些你不要的(1)2021.4.27 ~ 2021.6.12](https://blog.csdn.net/EI_Captain/article/details/118074883) 及其历史版本(例 4, 6)。 1. [Feux Follets](https://www.luogu.com.cn/problem/P7440) 及其[弱化版](https://www.luogu.com.cn/problem/P7439)(例 1, 2, 3)。 1. [2022 杭电多校 Round 6 C](https://qoj.ac/contest/973/problem/4491?v=1)(例 5)。 1. 2023 牛客多校 Round 10 H(例 7)。 1. Private conversation with tommymio / tommy0103(例 6)(详见[此文章](https://www.luogu.com.cn/blog/your-alpha1022/yet-another-eulerian-number-problem-qiu-xie-han-wei-fen-di-die-dai-li))。 1. Private conversation with Elegia / EntropyIncreaser。