数学杂谈 #24

关于欧拉数

以下内容摘抄自《具体数学》。

定义

定义一个 \(n\) 阶排列 \(\pi\) 的上升数 \(r(\pi)=\sum_{k=1}^{n-1}[\pi_k<\pi_{k+1}]\)

从组合意义的角度来说,对于 \(n>0, 0\le k<n\),我们定义欧拉数为:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} \eulnum{n}{k}=\sum_{\pi\in S_n}[r(\pi)=k] \]

欧拉数的递归式

我们考虑常见的构建排列的方法:从小到大插入每个元素。

首先考虑边界值。有组合意义的边界值为 \(\left<\begin{matrix}1\\0\end{matrix}\right>=1,\left<\begin{matrix}1\\1\end{matrix}\right>=0\)。我们先从这里入手。

考虑 \(n\ge 1,0\le k<n\),我们有一个 \(n\) 阶排列 \(\rho\) 满足 \(r(\rho)=k\)。向 \(\rho\) 中插入 \(n+1\) 生成排列 \(\pi\),我们需要讨论插入 \(n+1\) 的位置:

  1. 插在 \(\rho_1\) 之前,则有 \(r(\pi)=r(\rho)+1\)

  2. 插在 \(\rho_n\) 之后,则有 \(r(\pi)=r(\rho)\)

  3. 插在上升的元素之间,例如为 \(\rho_j<\rho_{j+1}\)。则原先的“上升”会被打破,\(\rho_j\)\(n+1\) 构成一个新的“上升”,\(n+1\)\(\rho_{j+1}\) 不会产生“上升”,因此 \(r(\pi)=r(\rho)\)

    我们知道一共有 \(k\) 个插入点归为这一类。

  4. 插在下降的元素之间,类似地讨论可以得到 \(r(\pi)=r(\rho)+1\)

    我们知道一共有 \(n-1-k\) 个插入点归为这一类。

整理一下,我们可以得到递归式:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} \eulnum{n}{k}=(k+1)\eulnum{n-1}{k}+(n-k)\eulnum{n-1}{k-1} \]

上述递归式要求 \(n>1,0<k<n\)。为了让形式更简洁,同时也更符合研究组合数、斯特林数的经验,我们可以作出如下约定:

  1. \(\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>}\eulnum{n}{-k}=0,k>0\)

  2. \(\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>}\eulnum{0}{k}=[k=0]\)

这样我们可以自然地将递归式拓展到 \(n>0\),并且组合意义和形式都可以得到保持。

欧拉数的部分性质

对称性

排列中,两个数之间的关系不是上升就是下降。有 \(k\) 个上升的排列恰好有 \(n-1-k\) 个下降,经过“反射”之后,新的排列恰好有 \(n-1-k\) 个上升。由于“反射”是 \(S_n\)\(S_n\) 的双射,我们可以得知:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>}\eulnum{n}{k}=\eulnum{n}{n-1-k},n>0 \]

可以验证,如果 \(k\)\([0,n)\) 范围之外,这个性质仍然成立!

容斥计算欧拉数

直接从递推式解出通项公式当然是可行的,但是......呃......我不会。

所以,我们还是考虑结合组合意义进行构造。

欧拉数运算的一部分是,给定一个由 \(<,>\) 构成的长度为 \(n-1\) 的字符串 \(s\),有多少个 \(n\) 阶排列 \(\pi\) 满足“对于 \(1\le k<n\)\(\pi_k\)\(\pi_{k+1}\) 的关系恰好为 \(s_k\)”?

Note.

如果说得不够清楚,读者可以参考「LibreOJ NOI Round #2」不等关系这道题。

进而,我们可以将 \(\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>}\eulnum{n}{m}\) 看作是所有恰好有 \(m\)\(<\)\(s\) 的结果求和。

延续一下上面那道题目的解法,我们枚举有多少个 \(<\) 的关系被打破了,这些被打破的 \(<\) 就相当于变成了 \(>\)。那么,现在合法的排列只需要满足所有的 \(>\),而不需要关心 \(<\)。仅满足 \(>\) 很简单,我们可以将 \(s\) 划分为极长的 \(>\) 连续段,为每个连续段分配值;由于一个连续段内的值必然按照确定顺序排放,因此方案数仅仅和“连续段数量”和“各连续段长度”有关,并且和集合划分的问题联系上了。

那么,考虑 \(s\) 不确定的情况。此时连续段的长度就不重要了,真正重要的是“连续段数量”。如果有 \(c\) 个连续段,容易发现此时的方案数为 \(\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}}c!\stwo{n}{c}\)(注意,各个值集合之间的顺序也会影响结果)。

因此,当 \(k\)\(<\) 被打破时,排列形态数为 \(\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}}(m+1-k)!\stwo{n}{m+1-k}\)。此时我们还需要选出变成 \(>\) 的那 \(k\)\(<\) 的位置,容易发现为 \(\dbinom{(n-1)-(m-k)}{k}\)。算上容斥系数,我们有:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers \begin{aligned} \eulnum{n}{m}&=\sum_{k=0}^m(-1)^k(m+1-k)!\stwo{n}{m+1-k}\dbinom{n-(m-k+1)}{k}\\ &=\sum_{k=1}^{m+1}(-1)^{m+1-k}k!\stwo{n}{k}\dbinom{n-k}{m+1-k}\\ \eulnum{n}{m}=\eulnum{n}{n-1-m}&=\sum_{k=1}^{n-m}(-1)^{n-m-k}k!\stwo{n}{k}\dbinom{n-k}{m} \end{aligned} \]

最后一个式子是《具体数学》上查到的,由于经过较多变形,所以虽然简洁却有点抽象。

这个容斥推导在 \(n>0\) 时是合法的。如果要扩展到 \(n\ge 0\),我们需要将求和下界放到 \(k=0\)(在 \(n=k=0\) 的时候就可以算出来为 \(1\))。当然,更好的写法是,\(k\) 取遍所有有意义值

欧拉数和第二类斯特林数

容斥方法为我们在欧拉数和第二类斯特林数之间搭了一座桥。现在我们尝试借助它,稍微深入地研究一下两者之间的关系。

首先注意到,RHS 可以看作是:

\[\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers \sum_{k}(-1)^{(n-k)-m}\binom{n-k}{m}\left(k!\stwo{n}{k}\right) \]

这是很好的形式。我们可以直接用二项式反演,算出来 \(\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} k!\stwo{n}{k}\)

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers k!\stwo{n}{k}=\sum_{m}\binom{m}{n-k}\eulnum{n}{m} \]

这个 \(\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} k!\stwo{n}{k}\) 有没有让你想到什么?

普通幂-欧拉数-组合数

我们知道 \(\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} k!\stwo{n}{k}\)\(x^n\) 的牛顿级数的系数。现在将这一堆东西代!进!去!

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers \begin{aligned} x^n &=\sum_k \binom{x}{k}\left(k!\stwo{n}{k}\right)\\ &=\sum_k \left(\sum_m \binom{m}{n-k}\eulnum{n}{m}\right)\binom{x}{k}\\ &=\sum_m \eulnum{n}{m}\left(\sum_k \binom{m}{n-k}\binom{x}{k}\right)\\ &=\sum_m \eulnum{n}{m}\binom{x+m}{n} \end{aligned} \]

漂亮!我们去掉了斯特林数。现在得到的其实是通过欧拉数建立的,关于普通幂和连续组合数/连续下降幂的直接关系。


这个东西有什么用?举个例子,我们考察典中典,自然数幂和:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \begin{aligned} S_r(n) &=\sum_{x=0}^{n-1}x^r\\ &=\sum_{x=0}^{n-1}\sum_{m=0}^{r-1}\eulnum{r}{m}\binom{x+m}{r}\\ &=\sum_{m=0}^{r-1}\eulnum{r}{m}\sum_{x=0}^{n-1}\binom{x+m}{r}\\ &=\sum_{m=0}^{r-1}\eulnum{r}{m}\binom{n+m}{r+1} \end{aligned} \]

只要我们可以快速算出来一行的欧拉数,我们就可以快速地算出自然数幂和。

自然,直接借助二项式反演的结论,我们可以 \(O(r\log r)\) 地算出来所有需要的数(这里同时包含了斯特林数和欧拉数的计算,都是 \(O(r\log r)\))。

另一个通项和行前缀和

我们知道:

\[\newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers m!\stwo{n}{m}=\sum_{k=0}^{m}(-1)^k\binom{m}{k}(m-k)^n \]

很容易想到把它代入到之前那个通项公式之中,于是有:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers \begin{aligned} \eulnum{n}{m} &=\sum_k(-1)^{n-m-k}\binom{n-k}{m}\left(k!\stwo{n}{k}\right)\\ &=\sum_k(-1)^{n-m-k}\binom{n-k}{m}\left(\sum_r(-1)^r\binom{k}{r}(k-r)^n\right)\\ &=(-1)^{n-m}\sum_k\sum_r(-1)^{k-r}\binom{n-k}{m}\binom{k}{k-r}(k-r)^n\\ &=(-1)^{n-m}\sum_r(-1)^rr^n\sum_k\binom{n-k}{m}\binom{k}{r}\\ &=(-1)^{n-m}\sum_r(-1)^rr^n\binom{n+1}{m+d+1}\\ \eulnum{n}{m}=\eulnum{n}{n-m-1} &=(-1)^{m+1}\sum_r(-1)^rr^n\binom{n+1}{m+1-r}\\ &=\sum_r(-1)^{r}(m+1-r)^n\binom{n+1}{r} \end{aligned} \]

最后一个式子也可以从《具体数学》上查到的,非常简洁。

需要注意的是,从书上查到的结果是,\(r\) 的求和范围为 \(0\le r\le m\),而这里算出来实际上为 \(0\le r\le m+1\)。在 \(m=0\) 的时候,前者结果恒为 \(1\),后者结果为 \([n\neq 0]\),也就是算出来的结果确实有那么些问题。

Remark.

我们注意到了左侧是欧拉数,右侧是类似于“二项式反演”+“普通幂”的形式。

那么,我们是不是可以直接从“普通幂”的结果推到这里来?

我猜是可以的,但是还没有做验证。可能需要特殊的赋值才可以完成。

如果用这个等式来计算一行欧拉数,那么我们仍然只能做到 \(O(n\log n)\)。然而,这个做法直接规避了斯特林数,而是用可以线性预处理的自然数幂和取代,因此会少一次卷积,更加简单。


另外,利用这一个等式,我们也可以考察一行欧拉数的前缀和:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \begin{aligned} \sum_{x=0}^{m-1}\eulnum{n}{x} &=\sum_{x=0}^{m-1}\sum_{r=0}^{x}(-1)^r(x+1-r)^n\binom{n+1}{r}\\ &=\sum_{r=0}^{m-1}(-1)^r\binom{n+1}{r}(S_n(m+1-r)-[n=0]) \end{aligned} \]

很有意思。一般来说,这种特殊数的行前缀和都是很难求的,但是欧拉数偏偏可以线性求出来。

不过换个角度思考,欧拉数可以和普通幂互相转换,而组合数、斯特林数如果要做这种转换,就必须互相挂钩,难度大一点也就可以理解。

欧拉数的生成函数

注意,这里的生成函数没有查阅资料检验过,因此仅作为尝试,不保证正确性

我们从恒等式:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \eulnum{n}{m}=\sum_{r=0}^m(-1)^r(m+1-r)^n\binom{n+1}{r} \]

入手。注意到,我们需要生成 \(\sum_{y\ge 0} y^rr^n\) 这样形式的生成函数。这是经典的,我们有:

\[\frac{1}{1-ye^x}=\sum_{n\ge 0}\sum_{r\ge 0}\frac{x^ny^rr^n}{n!} \]

为了方便,我们把 \(y\)\(r\) 错开一下,也就是使用 \(\frac{e^x}{1-ye^x}\)

而我们还有一个 \((-1)^r\dbinom{n+1}{r}\) 要处理。关于 \(r\) 配一个形式变元:

\[\sum_{r\ge 0}(-1)^r\dbinom{n+1}{r}y^r=(1-y)^{n+1} \]

恰好有 \(x^n\),因此我们可以得到:

\[\newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \eulnum{n}{m}=\sum_{r=0}^{m+1}(-1)^r(m+1-r)^n\binom{n+1}{r}=\left[\frac{x^ny^m}{n!}\right]\frac{(1-y)e^{x(1-y)}}{1-ye^{x(1-y)}} \]

二阶欧拉数

不懂,走啦。

\( % library \newcommand{\eulnum}[2]{\left<\begin{matrix}#1\\#2\end{matrix}\right>} % Eulerian Numbers \newcommand{\stwo}[2]{\begin{Bmatrix}#1\\#2\end{Bmatrix}} % Stirling Numbers \)

posted @ 2022-10-13 23:04  crashed  阅读(114)  评论(1编辑  收藏  举报