「学习笔记」欧拉数
定义
记一个排列 \(P\) 的升高为 \(k\) 当且仅当存在 \(k\) 个位置 \(i\) 使得 \(P_i<P_{i+1}\)。
那么定义欧拉数 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\) 表示长度为 \(n\) 且有 \(k\) 个上升的排列的数量。
递推式
通过讨论 \(n\) 在最左边,最右边还是中间可以得出转移:
计算
高妙的组合意义
考虑计算 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle / n!\) 也就是概率,可以发现,对于 \(n\) 个实数的均匀分布 \((a_1, a_2, \cdots, a_n) \in (0, 1)^n\) 产生和排列 \(P\) 相同的偏序关系的概率是 \(\frac 1{n!}\),这样我们就可以将问题转化为 \(a_i < a_{i + 1}\) 有 \(k\) 个的概率。
将 \(a\) 进行差分,定义 \(a_0 = 0,\ b_i = (a_i - a_{i - 1}) \bmod 1\),显然 \(b_i \in (0, 1)\)。
考虑 \(b_i\) 的实际意义,发现当 \(a_{i - 1} < a_i\) 时,\(b_i = a_i - a_{i - 1}\),否则 \(b_i = 1 + a_i - a_{i - 1}\),而 \(a_{i - 1} < a_{i}\) 有 \(k + 1\) 个(\(a_0 = 0\)),所以说 \(\sum b_i = n - k - 1 + a_n \in (n - k - 1, n - k)\)。这样,问题就变为了给定 \(n\) 个 \((0, 1)\) 之间的实数 \(x_1, x_2, \cdots, x_n\),求满足 \(\sum x_i \in (n - k - 1, n - k)\) 的概率,可以转化为 \(\sum x_i < n - k\) 的概率然后差分,设其为 \(F(n - k)\)。
使用几何概型,由于样本空间的“体积”是 \(1\),所以答案就是满足条件的区域的“体积”。
设 \(G(k)\) 表示 \(n\) 个随机变量没有限制的情况下的满足 \(\sum x_i < k\) 的区域的“体积”。
考虑容斥有多少个 \(x_i > 1\),能够列出式子:
接下来只需要知道如何计算 \(G(k)\) 即可。
将 \(n\) 个变量做前缀和,设为 \(t_i\),那么只需要满足 \(t_i < t_{i + 1}\) 且 \(t_n < k\) 的条件即可,由最开始的性质,可以将其对应到排列上得出概率为 \(\frac 1 {n!}\)。又因为 \(G(k)\) 是“体积”,所以 \(G(k) = \frac {k^n}{n!}\),即:
于是 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\) 可以做到计算一个 \(\mathcal O(n)\),计算一行 \(\mathcal O(n \log n)\)。
直接容斥
设 \(F(n, k)\) 表示长度为 \(n\) 的排列,钦定有 \(k\) 个 <
的方案数。
考虑将 <
看成边,那么排列中将会形成 \(n - k\) 个连通块,而连通块内部必须有序,连通块之间可以任意打乱顺序,所以方案数就是 \((n - k)!\begin{Bmatrix} n\\n - k \end{Bmatrix}\)。
由二项式反演:
解释一下最后一步吧,由于 \(\binom ik = [x^{i - k}] \frac 1{(1 - x)^{k + 1}}, \ \binom {n - i}j = [x^{n - i - j}] \frac 1{(1 - x)^{j + 1}}\),所以 \(\sum_i \binom ik \binom {n - i}j = [x^{n - j - k}] \frac 1 {(1 - x)^{k + j + 2}} = \binom {n + 1}{k + j + 1}\)。
同样可以直接卷积求出一行欧拉数。