闲话
原来,我们叹气的一瞬间就会成为大人啊。
彩蛋
jijidawang 20:19:39
老周啊老周,你太依赖 mma 了!
joke3579 20:19:47
可是 mma 真的很好用啊!
推闲话:6.23 6.24。
推歌:枯萎 by 物理p feat. 诗岸
概率密度扩充状态的一个尝试
回顾我们熟知的一系列排列计数问题,它们都以上升/下降相关的限制著称。
一个长度为 \(n\) 的排列可以通过观察两项间大小关系得到一个长度为 \(n - 1\) 的由 >
和 <
组成的符号列,对应的限制加在这符号列上。
例如:小孩召开法计数了限制最长交错子符号列长度的排列,而这子列以 >
起始,相邻两个符号不同。Chasse Neige 计数了序列以 <
起始,<
终止且限制峰个数的排列,其中一个峰是结构 <>
。
对此计数问题,一种常用的转化手段是让选择某元素的可行性彼此独立,这样对下降的刻画就会变得相对简单。因此我们使用概率密度扩充状态(咋想到的啊?),让限制条件导出的 bgf 的系数是对应序列末尾元素的概率密度函数。我们只需要求在实数列末尾加一个实数,从而添加一个 >
或 <
,从而得到最终的符号列的分布,进而还原计数序列。
到这里可能导出两种结构。
第一种只需要一个 bgf,这样处理相对简单,不再赘述。例题如新年的军队,由于前一个符号对答案/总数量的统计没有影响,我们只需要讨论当前的符号,因此对原概率密度函数求原函数即可,求解微分方程的方法应当是较为简单的。
但更多的时候,我们需要计数更大的结构,如峰或交错子符号列。这时我们就需要多个 bgf 来记录该位置前的部分信息。多个关系直接导出的是微分方程组,这样我们就只能解微分方程,处理矩阵对角化,矩阵求逆,化简公式,展开分母,处理 Algebraic GF,给最后的数列算整式递推(
这时的微分方程一般具有特殊性质。由于我们只需要对先前的概率密度函数做积分来得到当前的分布,得到的微分方程大多是一阶的。同时,微分方程是对概率密度函数的变元进行的,其余占位元均可视为常数。而我们的目的是将微分方程组拆解成彼此无关的几个线性方程,自然想到对角化。
好像说的有点抽象?以小孩召开法为例。
令长为 \(n\),最长交错子列长度为 \(k\) 且末尾符号为 <
/>
的符号列关于末尾位置的概率密度函数为 \([x^nq^k] A(x,q,t)\) / \([x^nq^k] D(x,q,t)\)。容易知道 \(n![x^{n - 1} q^{K-1}]\int_0^1 (A(t) + D(t)) \mathrm dt\) 即为最终答案,这是由于后面提取系数的部分得到了满足条件的符号列的分布,即任意选择一个排列满足要求的概率。
根据转移,直接列出方程
\[\begin{aligned}
& A(t) = 1 + x\int_0^t (A(u) + qD(u)) \mathrm du
\\ & D(t) = x \int_t^1 (qA(u) + D(u)) \mathrm du
\end{aligned}\]
两侧对 \(t\) 求导,并写作矩阵形式得到
\[\frac{\mathrm d}{\mathrm dt} {{A}\brack{D}} = x\begin{bmatrix} 1 & q \\ -q & -1\end{bmatrix} {{A}\brack{D}}
\]
这时注意到右侧的变换其实对 \(t\) 是一个常数矩阵,对角化为 \(X^{-1}\Lambda X\) 后左右左乘 \(X\) 即有
\[\frac{\mathrm d}{\mathrm dt}\left( X{{A}\brack{D}}\right) = x\Lambda \left(X {{A}\brack{D}}\right)
\]
因此令
\[{{U}\brack{V}} = X{{A}\brack{D}}
\]
就有
\[\frac{\mathrm d}{\mathrm dt}{{U}\brack{V}} = x\Lambda{{U}\brack{V}}
\]
而由于 \(x\Lambda\) 为对角矩阵,我们成功地将这微分方程组拆解成了
\[\begin{aligned}
& U' = x\Lambda _{1,1}(q) U
\\ & V' = x\Lambda _{2,2}(q) V
\end{aligned}\]
熟知一阶线性微分方程的解。这里就先暂停一下,列出 \(X\) 和 \(\Lambda\) 的具体值,这样方便后面式子的化简。下面使用 mma 进行推导。
joke3579,你太依赖 mma 了! 可是 mma 真的很好用啊!
可以用 DiagonalizableMatrixQ[A]
判断矩阵是否可对角化,JordanDecomposition[A]
对角化矩阵,其返回 \(\left\{X^{-1}, \Lambda\right\}\)。
下面就用 mma 对角化出来的矩阵推吧。我们知道
\[\Lambda = \begin{bmatrix} -\sqrt{1-q^2} & \\ & \sqrt{1-q^2}\end{bmatrix}
\]
\[\begin{aligned}
X &= \begin{bmatrix} \dfrac{q}{2\sqrt{1-q^2}} & \dfrac{-1-\sqrt{1-q^2}}{2\sqrt{1-q^2}} \\ \dfrac{-q}{2\sqrt{1-q^2}} &\dfrac{-1+\sqrt{1-q^2}}{2\sqrt{1-q^2}}\end{bmatrix}
\\
X^{-1} &= \begin{bmatrix} q^{-1}\left(-1+\sqrt{1-q^2}\right) & q^{-1}\left(-1-\sqrt{1-q^2}\right) \\ 1 & 1 \end{bmatrix}
\end{aligned}\]
而
\[\begin{aligned}
& U = C_1 \exp\left(-xt\sqrt{1-q^2}\right)
\\ & V = C_2 \exp\left(xt\sqrt{1-q^2}\right)
\end{aligned}\]
由 \([A, D]^{\mathsf T} = X [U, V]^{\mathsf T}\),左右左乘 \(X^{-1}\) 得到
\[\begin{aligned}
& A = \frac{-1+\sqrt{1-q^2}}{q} U + \frac{-1-\sqrt{1-q^2}}q V
\\ & B = U + V
\end{aligned}\]
“仿照新年的军队之手法”,令 \(\mathscr A = \int_0^1 A(t)\mathrm dt\),\(\mathscr D = \int_0^1 D(t)\mathrm dt\),它们是以 \(x, q\) 为占位元的 bgf,组合意义上是所有满足约束条件的符号列的分布,也就是开始时提到的“最终答案”的一部分。
为了解出常数,我们需要边界条件。这时目光回到转移方程,带入 \(t = 0\) 得到
\[A(0) = 1,\qquad D(0) = x \int_0^1 (qA(u) + D(u)) \mathrm du = x(q\mathscr A + \mathscr D)
\]
\[U = C_1, \qquad V = C_2
\]
带入 \(t = 1\) 得到
\[A(1) = 1 + x\int_0^1 (A(u) + qD(u)) \mathrm du = 1 + x(\mathscr A + q\mathscr D), \qquad D(1) = 0
\]
\[U = C_1\exp\left(-x\sqrt{1-q^2}\right), \qquad V = C_2\exp\left(x\sqrt{1-q^2}\right)
\]
令 \(r = \sqrt{1-q^2}\),解上面的方程组得到
\[x(\mathscr A + \mathscr D) = \frac{(e^{rx}-1)(q + r + e^{rx}+qe^{rx} - re^{rx} + 1)}{(q + 1)(r - e^{2rx} + re^{2rx} + 1)}
\]
由上面的讨论,首先提取 \(\left[\dfrac{x^n}{n!}\right]\) 得到
\[\begin{aligned}
& \left[\frac{x^n}{n!}\right] x(\mathscr A + \mathscr D)
\\ = \ & \left[\frac{x^n}{n!}\right] \frac{(e^{rx}-1)\left(q\left(1 + e^{rx}\right) + r\left(1 - e^{rx}\right) + e^{rx} + 1\right)}{(q + 1)(e^{2rx}(r-1) + r + 1)}
\\ = \ & \left[\frac{x^n}{n!}\right] \frac{(e^{rx}-1)\left(\frac{r\left(1 - e^{rx}\right)}{1+q} + e^{rx} + 1\right)}{\left(1 + e^{2rx}\frac{r-1}{r + 1}\right)(r + 1)}
\\ = \ & \left[\frac{x^n}{n!}\right] \frac{(e^{rx}-1)\left(\frac{r\left(1 - e^{rx}\right)}{1+q} + e^{rx} + 1\right)}{r + 1} \sum_{i\ge 0} \left(e^{2rx}\frac{1 - r}{r + 1}\right)^i
\\ = \ & \left[\frac{x^n}{n!}\right] \sum_{i\ge 0} e^{2irx} \frac{(1-r)^i}{(1+r)^{i+1}} (e^{rx}-1)\left(\frac{r\left(1 - e^{rx}\right)}{1+q} + e^{rx} + 1\right)
\\ = \ & \left[\frac{x^n}{n!}\right] \sum_{i\ge 0} e^{2irx} \frac{(1-r)^i}{(1+r)^{i+1}} \left(\frac{-r\left(1 - e^{rx}\right)^2}{1+q} + e^{2rx} - 1\right)
\\ = \ & \left[\frac{x^n}{n!}\right] \sum_{i\ge 0} \frac{(1-r)^i}{(1+r)^{i+1}} \left(\frac{-r}{1 + q}\left(e^{2irx} + e^{(2i+2)rx} - 2e^{(2i+1)rx}\right) + e^{(2i+2)rx} - e^{2iex}\right)
\\ = \ & \sum_{i\ge 0} \frac{(1-r)^i}{(1+r)^{i+1}} \left(\frac{-r}{1 + q}\left((2i)^n + (2i+2)^n - 2(2i+1)^n\right) + (2i + 2)^n - (2i)^n\right) r^n
\end{aligned}\]
EI 在展开分母的时候有 typo,应当是展开 \(1-t\) 而非 \(1+t\)。这里由于 \(1-r\) 的最低次项为 \(q^2\),我们可以只枚举 \(2i \le K\) 的所有 \(i\)。由于求幂可以 \(O(n \log_Kn)\),系数可以预处理,最后只需要解决对一行 \(i\) 提取 \([q^{K-1}] \dfrac{r^n(1-r)^i}{(1+r)^{i + 1}}\) 和 \([q^{K-1}] \dfrac{r^{n+1}(1-r)^i}{(q + 1)(1+r)^{i + 1}}\)。
这个东西目前不会,先咕了。目前只会按鰰的方法粗暴处理。但 2log 会 t。
upd: 会了。♿
首先看第一个。套用这篇闲话里的记号,我们知道
\[f(q) = \frac{1 - \sqrt{1 - q^2}}{1 + \sqrt{1 - q^2}}, \qquad g(q) = \frac{(1 - q^2)^{n/2}}{1 + \sqrt{1 - q^2}}
\]
注意到 \(\text{ord } f = 2\),这是由于 \(f(0) = 0\),即其无常数项,且 \(f(\sqrt q)\) 为多项式,并有 \(\lim\limits_{q\to 0} f(\sqrt q)/q = 1/4\)。这样我们就将问题确定为了 \(3.\) 情况。此时有 \(d = 2, c = 1/4\),因此令 \(F(x) = \sqrt{4f(x)}\),易求得 \(h(x) = F^{\langle -1 \rangle}(x) = \dfrac{4x}{x^2 + 4}\)。就有
\[[q^{K-1}] \dfrac{r^n(1-r)^i}{(1+r)^{i + 1}} = \frac{1}{4^i}[x^{K - 1}] g(x) F(x)^{2i} = 4^{-i}[x^{K - 1 - 2i}] g\left(h(x)\right) h'(x) \left(\frac{x}{h(x)}\right)^K
\]
随便做就能 \(O(n\log n)\)。由于最后是 d-finite 的,可以做到 \(O(n)\)。
第二个一样。这时有
\[h(x) = \frac{4x}{x^2 + 4}, \qquad g(x) = \frac{\left(1 - x^2\right)^{(n + 1)/2}}{(1 + x)\left(1 + \sqrt{1 - x^2}\right)}
\]
随便做就能 \(O(n\log n)\)。由于最后是 d-finite 的,可以做到 \(O(n)\)。
这样我们就把 EI 的做法补完了。虽然我不太会用偶的自动机推这个,但我至少会推其中一部分的系数,这样就能把带 \(\log\) 的部分缩减到几次乘法除法。可以通过。
Submission.
Reference:
[1] Elegia et al.,小孩召开法的一个尝试