[cf 947E] Perpetual Subtraction

题意

现在有个正整数\(x\),你要进行\(m\)轮操作,每次将\(x\)随机变为\([0, x]\)中的一个整数。
\(m\)轮之后,这个数为\(i(0 \leq i \leq x)\)的概率。

题解

考虑一个normaldp:设\(f_{i, j}\)表示第\(i\)轮后,这个数为\(j\)的概率,则:

\[f_{i, j} = \sum_{k \geq j} f_{i - 1, k} * \frac{1}{k + 1} \]

则可以写出转移矩阵:

\[T = \begin{bmatrix} 1 & \frac{1}{2} & \frac{1}{3} & \ldots & \frac{1}{n + 1} \\ 0 & \frac{1}{2} & \frac{1}{3} & \ldots & \frac{1}{n + 1} \\ 0 & 0 & \frac{1}{3} & \ldots & \frac{1}{n + 1} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 0 & 0 & 0 & \ldots & \frac{1}{n + 1} \\ \end{bmatrix} \]

设初始向量为\(\vec b\),则最后要求的是\(T ^ m \vec b\)
这样是\(\mathcal O(n ^ 3 \log n)\)的。
考虑优化。像这样的线性递推,一般能做到\(\mathcal O(n ^ 2)\),做到\(\mathcal O(n \log n \log k)\)的做法很难……

另辟蹊径。有一种高妙的相似对角化做法。
有定理,一个矩阵如果是线性无关的,则必定可以相似对角化。
\(S = P T P ^ {-1}\),其中\(P\)是可逆矩阵,\(S\)是对角矩阵。
求这个\(S\)的过程一般分为几步:求矩阵\(T\)特征值和特征向量->将特征向量当列向量排列于矩阵\(P\)中->计算\(S\)

考虑\(T\)的特征值,特征值即满足\(\exists \vec v \neq \vec 0, T \vec v = \lambda \vec v\)\(\lambda\),其充要条件是\(|T - \lambda I| = 0\)
由于

\[|T - \lambda I| = \left | \begin{array} 1 - \lambda & \frac{1}{2} & \frac{1}{3} & \ldots & \frac{1}{n + 1} \\ 0 & \frac{1}{2} - \lambda & \frac{1}{3} & \ldots & \frac{1}{n + 1} \\ 0 & 0 & \frac{1}{3} - \lambda & \ldots & \frac{1}{n + 1} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 0 & 0 & 0 & \ldots & \frac{1}{n + 1} - \lambda \\ \end{array} \right | = \left | \begin{array} 1 - \lambda & \lambda & 0 & \ldots & 0 \\ 0 & \frac{1}{2} - \lambda & \lambda & \ldots & 0 \\ 0 & 0 & \frac{1}{3} - \lambda & \ldots & 0 \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 0 & 0 & 0 & \ldots & \frac{1}{n + 1} - \lambda \\ \end{array} \right | = 0 \]

这个行列式直接用定义式求,得出

\[(1 - \lambda)(\frac{1}{2} - \lambda)\ldots(\frac{1}{n + 1} - \lambda) = 0 \]

则所有特征值为\(1, \frac{1}{2}, \ldots, \frac{1}{n + 1}\)

接着考虑特征向量,特征值即满足\(\exists \vec v \neq \vec 0, T \vec v = \lambda \vec v\)\(\vec v\)
尝试进行小范围的模拟计算,可以得出结果:
满足\(T \vec v_i = \frac{1}{i} \vec v_i\)\(\vec v_i\)

\[\begin{bmatrix} (-1) ^ {i - 1} \binom{i - 1}{0} \\ (-1) ^ {i} \binom{i - 1}{1} \\ \ldots \\ (-1) ^ {i + i - 2} \binom{i - 1}{i - 1} \\ 0 \\ \ldots \\ 0 \\ \end{bmatrix} \]

proof1

\[P = \begin{bmatrix} 1 & -1 & 1 & \ldots & (-1) ^ n \binom{n}{0} \\ 0 & 1 & -2 & \ldots & (-1) ^ {n + 1} \binom{n}{1} \\ 0 & 0 & 1 & \ldots & (-1) ^ {n + 2} \binom{n}{2} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 0 & 0 & 0 & \ldots & (-1) ^ {n + n} \binom{n}{n} \\ \end{bmatrix} \]

\[P ^ {-1} = \begin{bmatrix} 1 & 1 & 1 & \ldots & \binom{n}{0} \\ 0 & 1 & 2 & \ldots & \binom{n}{1} \\ 0 & 0 & 1 & \ldots & \binom{n}{2} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 0 & 0 & 0 & \ldots & \binom{n}{n} \\ \end{bmatrix} \]

proof2
又因为\(S = P T P ^ {-1}\)\(T = P ^ {-1} S P\)。有了\(P\)\(S\)能用几次多项式卷积快速计算出。
但是如果\(S\)没有好的性质,也是无济于事的。但是事实证明,\(S\)是一个对角矩阵。
proof3

\[\begin{aligned} ans & = T ^ m \vec b \\ & = (P ^ {-1} S P) ^ m \vec b \\ & = P ^ {-1} S (P P ^ {-1} S) ^ {m - 1} P \vec b \\ & = P ^ {-1} S ^ m P \vec b \\ \end{aligned} \]

考虑对角矩阵的幂次很好求,相当于把\(\vec b\)和前面几个矩阵依次用卷积卷一卷就出来了。
复杂度是\(\mathcal O(n \log m + n \log n)\)的。


proof1:
即证明\(T \vec v_i = \lambda_i \vec v_i\),亦即\(\sum_{j} T_{k, j} \vec v_{i, j} = \lambda_i \vec v_{i, k}\)
如下:

\[\begin{aligned} \sum_{j} T_{k, j} \vec v_{i, j} & = \sum_{j = k} ^ n \frac{1}{j + 1} (-1) ^ {i + j} \binom{i}{j} \\ & = \sum_{j = k} ^ n \frac{1}{j + 1} (-1) ^ {i + j} \frac{i!}{j!(i - j)!} \\ & = \frac{1}{i + 1} \sum_{j = k} ^ n (-1) ^ {i + j} \frac{(i + 1)!}{(j + 1)!(i - j)!} \\ & = \frac{1}{i + 1} \sum_{j = k} ^ n (-1) ^ {i + j} \binom{i + 1}{j + 1} \\ & = \frac{1}{i + 1} \sum_{j = k} ^ n (-1) ^ {i + 1} \binom{j - i - 1}{j + 1} \\ & = \frac{(-1) ^ {i + 1}}{i + 1} \sum_{j = k} ^ n \binom{j - i - 1}{j + 1} \\ & = \frac{(-1) ^ {i + 1}}{i + 1} [\binom{i - i - 1 + 1}{i + 1} - \binom{k - i - 1}{k}] \\ & = \frac{(-1) ^ i}{i + 1} \binom{k - i - 1}{k} \\ & = (-1) ^ {i + k} \binom{i}{k} \\ & = \lambda_i v_{i, k} \\ \end{aligned} \]

其中用到了杨辉三角一斜列求和和牛顿二项式定理的导出式。
杨辉三角一斜列求和:

\[\sum_{i = l} ^ r \binom {n + i}{m + i} = \binom{n + r + 1}{m + r} - \binom{n + l}{m + l - 1} \]

牛顿二项式定理的导出式:

\[\binom{-n}{m} = (-1) ^ m \binom{n + m - 1}{m} \]

proof2:
即证明:

\[\sum_{k = 1} ^ n {P ^ {-1}}_{i, k} P_{k, j} = [i = j] \]

又因为

\[{P ^ {-1}}_{i, j} = \binom {j}{i} = \sum_{k = 0} ^ n [k = i] \binom{j}{k} \]

通过二项式反演,得

\[[j = i] = \sum_{k = 0} ^ n (-1) ^ {j - k} {P ^ {-1}}_{i, k} \binom{j}{k} \]

\[\begin{aligned} \sum_{k = 1} ^ n {P ^ {-1}}_{i, k} P_{k, j} & = \sum_{k = 1} ^ n (-1) ^ {j + k} \binom{j}{k} {P ^ {-1}}_{i, k} \\ & = \sum_{k = 0} ^ n (-1) ^ {j - k} \binom{j}{k} {P ^ {-1}}_{i, k} \\ & = [i = j] \end{aligned} \]

proof3:
由于

\[\begin{aligned} T P & = T {[\vec v_1, \vec v_2, \vec v_3, \ldots, \vec v_{n + 1}]} ^ T \\ & = {[T \vec v_1, T \vec v_2, T \vec v_3, \ldots, T \vec v_{n + 1}]} ^ T \\ & = {[\lambda_1 \vec v_1, \lambda_2 \vec v_2, \lambda_3 \vec v_3, \ldots, \lambda_{n + 1} \vec v_{n + 1}]} ^ T \\ & = P \text{diag}(\lambda_1, \lambda_2, \lambda_3, \ldots, \lambda_{n + 1}) \\ \end{aligned} \]

\[P ^ {-1} T P = \text{diag}(\lambda_1, \lambda_2, \lambda_3, \ldots, \lambda_{n + 1}) \\ \]

\(S = P ^ {-1} T P\)是对角阵\(\text{diag}(\lambda_1, \lambda_2, \lambda_3, \ldots, \lambda_{n + 1})\)


另附生成函数做法(图片出自_rqy's Blog)。

posted @ 2019-09-20 22:00  psimonw  阅读(345)  评论(0编辑  收藏  举报