首页 > 其他分享 >欧拉数小记

欧拉数小记

时间:2023-07-20 17:25:33浏览次数:33  
标签:begin right end dbinom matrix 小记 欧拉 left

模拟赛考到了这个,感觉太厉害啦!来写一点东西,以防自己以后看不懂了。

欧拉数:定义一个排列 \(p\) 的升高为 \(\sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]\),那么欧拉数 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\) 就代表满足升高为 \(k\) 的长度为 \(n\) 的排列的数量。

可能有点抽象,我们举个例子:比如 \(\left\langle\begin{matrix}4\\2\end{matrix}\right\rangle=11\),因为我们可以找出 11 个满足升高为 2 的排列:\(\{1,3,2,4\},\{1,4,2,3\},\{2,3,1,4\},\{2,4,1,3\},\{3,4,1,2\},\{1,2,4,3\},\{1,3,4,2\},\{2,3,4,1\},\{2,1,3,4\},\{3,1,2,4\},\{4,1,2,3\}\)。

好,接下来我们将重点放在怎么求欧拉数上。因为这是一个排列,我们考虑一个从小到大插入的过程。显然新加入的数如果不在最后一定会新产生一个升高。稍微对新产生的升高与被破坏的升高分类讨论一下就可以得到一个基础的式子:

  • 插入到最左边,不会产生升高,从 \(\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle\) 转移过来;

  • 插入到最右边,产生一个升高,从 \(\left\langle\begin{matrix}n-1\\k-1\end{matrix}\right\rangle\) 转移过来;

  • 插入到一个升高中,新产生的升高与原来的抵消,从 \(\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle\) 转移过来。原来有 \(k\) 个升高,所以有 \(k\) 种选法;

  • 不插入到一个升高中,新产生一个升高,从 \(\left\langle\begin{matrix}n-1\\k-1\end{matrix}\right\rangle\) 转移过来。原来有 \(k-1\) 个升高,所以有 \((n-1)-1-(k-1)=n-k-1\) 种选法;

综上所述,可以得到一个最基本的递推式:

\[\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle=(k+1)\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle+(n-k)\left\langle\begin{matrix}n-1\\k-1\end{matrix}\right\rangle \]

这样我们就有了一个 \(\mathcal{O}(n^2)\) 的 DP 求欧拉数的方法。

这个式子已经可以过掉 P2401UVA1485 了,但是我们还需要更快的做法。

直接瞪这个式子得不到什么结论,可以手玩几个较小的例子猜一猜结论,比如 \(k\le 1\)。显然 \(\left\langle\begin{matrix}n\\0\end{matrix}\right\rangle=1\)。

算 \(\left\langle\begin{matrix}n\\1\end{matrix}\right\rangle\) 可以这样:我们钦定小于号放在了第 \(i\) 和 \(i+1\) 个之间,剩下两边肯定都是下降排列的,只要知道了具体选什么数就可以唯一确定,这一部分方案数是 \(\sum\limits_{i=1}^{n-1}\dbinom{n}{i}\)。但是这样做可能会出现没有小于号的情况,也就是 \(\{n,n-1,\ldots 1\}\) 并不合法,且被计算了 \(n-1\) 次,需要减掉,即 \(\left\langle\begin{matrix}n\\1\end{matrix}\right\rangle=\left(\sum\limits_{i=1}^{n-1}\dbinom{n}{i}\right)-(n-1)\)。

注意到前面那一坨是二项式定理的样子,故 \(\left\langle\begin{matrix}n\\1\end{matrix}\right\rangle=\left(\sum\limits_{i=0}^{n}\dbinom{n}{i}\right)-\dbinom{n}{0}-\dbinom{n}{n}-(n-1)=2^n-n-1\)。

实际上,我们可以更大胆一些:我们直接猜 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle=\sum\limits_{i=0}^k(-1)^i\dbinom{n+1}{i}(k+1-i)^n\)。经过试验,我们发现它应该是对的,下面尝试用归纳法证明。

回到上面那个 \(\mathcal{O}(n^2)\) 的式子。假设我们已经对 \(\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle\) 和 \(\left\langle\begin{matrix}n-1\\k-1\end{matrix}\right\rangle\) 证明了上述结论,可以证明 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\) 也有同样的结论。

\[\begin{aligned} \left\langle\begin{matrix}n\\k\end{matrix}\right\rangle&=(k+1)\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle+(n-k)\left\langle\begin{matrix}n-1\\k-1\end{matrix}\right\rangle\\ &=\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i}(k+1)(k+1-i)^{n-1}+\sum\limits_{i=0}^{k-1}(-1)^i\dbinom{n}{i}(n-k)(k-i)^{n-1}\\ \end{aligned} \]

发现最后一个式子的形式格格不入,考虑枚举原来的 \(i+1\) 作为现在的 \(i\)。

\[\begin{aligned} \left\langle\begin{matrix}n\\k\end{matrix}\right\rangle&=\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i}(k+1)(k+1-i)^{n-1}+\sum\limits_{i=0}^{k-1}(-1)^i\dbinom{n}{i}(n-k)(k-i)^{n-1}\\ &=\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i}(k+1)(k+1-i)^{n-1}+\sum\limits_{i=1}^k(-1)^{i-1}\dbinom{n}{i-1}(n-k)(k-i+1)^{n-1}\\ &=\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i}(k+1)(k+1-i)^{n-1}-\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i-1}(n-k)(k-i+1)^{n-1}\\ \end{aligned} \]

这里,上一步可以把最后一个式子改为从 0 开始枚举 \(i\) 是因为在 \(i=0\) 时 \(\dbinom{n}{i-1}=0\)。

把式子们的公因式提出来:

\[\begin{aligned} \left\langle\begin{matrix}n\\k\end{matrix}\right\rangle&=\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i}(k+1)(k+1-i)^{n-1}-\sum\limits_{i=0}^k(-1)^i\dbinom{n}{i-1}(n-k)(k-i+1)^{n-1}\\ &=\sum\limits_{i=0}^k(-1)^i(k+1-i)^{n-1}\left[\dbinom{n}{i}(k+1)-\dbinom{n}{i-1}(n-k)\right]\\ \end{aligned} \]

进行一个式子的拆:

\[\begin{aligned} \left\langle\begin{matrix}n\\k\end{matrix}\right\rangle&=\sum\limits_{i=0}^k(-1)^i(k+1-i)^{n-1}\left[\dbinom{n}{i}(k+1)-\dbinom{n}{i-1}(n-k)\right]\\ &=\sum\limits_{i=0}^k(-1)^i(k+1-i)^{n-1}\left[\dbinom{n}{i}(k-i+1)+\dbinom{n}{i}i-\dbinom{n}{i-1}(n-k)\right]\\ &=\sum\limits_{i=0}^k(-1)^i(k+1-i)^{n-1}\left[\dbinom{n}{i}(k-i+1)+\dfrac{n-i+1}{i}\times\dbinom{n}{i-1}i-\dbinom{n}{i-1}(n-k)\right]\\ &=\sum\limits_{i=0}^k(-1)^i(k+1-i)^{n-1}\left[\dbinom{n}{i}(k-i+1)+\dbinom{n}{i-1}(k-i+1)\right]\\ &=\sum\limits_{i=0}^k(-1)^i(k+1-i)^n\dbinom{n+1}{i}\\ \end{aligned} \]

参考资料:Karry5307 浅谈欧拉数

标签:begin,right,end,dbinom,matrix,小记,欧拉,left
From: https://www.cnblogs.com/xx019/p/17566772.html

相关文章

  • 欧拉函数
    「观前提醒」「文章仅供学习和参考,如有问题请在评论区提出」欧拉函数定义欧拉函数的符号表示是\(\varphi(n)\),表示\(1\simn\)中和\(n\)互质的数的个数。例如,\(\varphi(12)=4\),即\(1,5,7,11\)。性质若\(n\)是质数,则\(\varphi(n)=n-1\)。......
  • 【2023.07.17】牛客&第四范式多校Day1(华中科技大学Round)过题小记
    D-Chocolate(博弈论)12分钟过题。签到。K-Subdivision(图论、搜索)1小时21分过题,签到。如果给定的是一棵树的话,新增的点一定位于连接叶子节点的那条边上、否则就是已有的点。然而这是一张图,所以我们可以使用\(\ttbfs\)将其近似的转化为一棵树:当某个点(非其父节点)被第二次遍历......
  • 【2023.07.16】清华&字节夏令营资格赛(Tsinghua University Bootcamp. Qualification R
    B-Performance(贪心、排序)23分过题。打卡题,差分+排序。A-CodeLock(图论、搜索)37分由队友单人过题。打卡题,将序列转化为图上问题,随后维护每一个环上相同元素的距离。D-CompanyNetwork(树论、倍增、数据结构)2小时55分全队一起过题。中等难度,对于每一个节点,倍增向上搜索其......
  • 【2023.07.14】Atcoder:past201912 - 第一回 アルゴリズム実技検定(div4+区域赛难度)过题
    G-Division解法一:位运算+状压枚举(赛时思路)范围显然,可以跑\(2^n\)的算法,考虑位运算状态压缩。以\(\mathcalO(2^n\cdot2^n)\)的复杂度分别枚举位于第一组、第二组中的人,随后计算每一种分组的快乐值,代码较长,赛时敲了半个小时,不过好在一发过了。总结:其实代码里面的剪枝完......
  • AXI总线协议小记
    目录介绍Channel(通道)五个通道的共同点ARC/AWC(读地址通道/写地址通道)RC(读数据通道)WC(写数据通道)BC(写响应通道)设备之间的连接Registerslice信号定义全局信号AWC信号WC信号BC信号ARC信号RC信号一对一接口定义时钟和复位时钟ALCK复位ARESETn基础读/写事务握手各通道的握手信号及约定AW......
  • 数据结构小记
    线段树区间查询线段树可以维护具有结合律的信息。区间修改区间查询加上修改后应当满足的前提是我们可以维护一个封闭的集合\(\mathcal{S}\),使得任一操作\(o\in\mathcal{S}\),且\(\mathcal{S}\)对于复合封闭,即对任意\(u,v\in\mathcal{S}\),有\(u\circv\in\mathcal{S}\)......
  • openEuler(华为欧拉)使用docker安装wine 8+版本,支持32位程序
    安装docker参考:openEuler安装docker下载wine镜像wine的docker镜像,支持i386点击上述网址,查看、选择你想要安装的版本,例如8.0.1.使用以下命令安装:dockerpulltianon/wine:8.0.1启动wine容器下载完成后,使用以下命令启动:dockerrun-it-eDISPLAY=$DISPLAY-v$(pwd):/mnt......
  • P4139(扩展欧拉定理的应用)
    欧拉定理及扩展题意:求思路:运用扩展欧拉定理进行欧拉降幂:然后递归求解即可。AC代码://-----------------//#pragmaGCCoptimize(2)#include<iostream>#include<cstring>#include<algorithm>#defineIOSios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0)......
  • MySQL多表查询-小记
    基本的多表查询模板:SELECT列列表FROM表1JOIN表2ON连接条件JOIN表3ON连接条件...WHERE筛选条件GROUPBY分组列HAVING分组筛选条件ORDERBY排序列SELECT:指定要查询的列,可以使用逗号分隔多个列。FROM:指定要查询的表,可以使用逗号分隔多个表。在查询中涉......
  • 欧拉-拉格朗日方程
    对于形如 的泛函,总有f(x0)使得A(f)最小,且此时有 称之为欧拉-拉格朗日方程 L对其自变量求导,代入欧拉-拉格朗日方程和L(x,f(x),f'(x)),得到f'(x)的表达式或方程,进而得到f(x)的表达式 总结:对于实际问题对应成A(f),得到对应的欧拉-拉格朗日方程,进而得出使A(f)取得极值的f......