首页 > 其他分享 >计数问题学习笔记

计数问题学习笔记

时间:2025-01-18 18:14:59浏览次数:1  
标签:end sum 笔记 学习 反演 计数问题 binom aligned brace

基础差得死,整版讲课课件能看懂的就 \(10\%\),所以过来补一补。数学那一块差不多,计划单开一个博客。分类整理以下吧。

卡特兰数

问题引入

有一个大小为 \(n\times n\) 的网格图,每次从 \((x,y)\) 只能走一步到 \((x+1,y)\) 或 \((x,y+1)\),求不走到对角线即 \(y=x\) 下方,但可以触碰对角线,从 \((0,0)\) 走到 \((n,n)\) 的方案数。

解法

直接推还是有难度的。正难则反,我们考虑用容斥整出答案。首先,从 \((0,0)\) 到 \((n,n)\) 的路径方案数是 \(\binom{n+n}n=\binom{2n}n\),这个好算。尝试构造不合法情况,这个时候可以触碰 \(y=x\) 的性质就很烦了,因此将条件转化一下,变成不触碰 \(y=x-1\) 的方案数。继续观察,不难发现在这个条件下以 \((1,-1)\) 为起点的到 \((n,n)\) 的路径全部经过了 \(y=x-1\)。考虑到 \((1,-1)\) 和 \((0,0)\) 关于 \(y=x-1\) 对称,感性理解一下,假设这些非法路径与 \(y=x-1\) 最后一次交于 \((i,i-1)\),那么把这条路径前面的部分沿 \(y=x-1\) 翻转以下,就能一一对应原来的所有不合法情况。容易算出这些非法路径方案数为 \(\binom{n-1+n+1}{n-1}=\binom{2n}{n-1}\),随后相减得出答案 \(\binom{2n}n-\binom{2n}{n-1}=\frac{2n!}{n!n!}-\frac{2n!}{(n-1)!(n+1)!}=(1-\frac{n}{n+1})\frac{2n!}{n!n!}=\frac1{n+1}\binom{2n}n\)。

定义

上述问题的答案被称作卡特兰数,记为 \(C_n\) 或 \(H_n\),满足:

\[\begin{aligned}C_n=H_n&=\dbinom{2n}n-\dbinom{2n}{n-1}\\&=\dfrac{\binom{2n}n}{n+1}\\&=\dfrac{\sum_{i=0}^{n}\binom{n}{i}^2}{n+1}\end{aligned} \]

对于卡特兰数,除上述通项公式外还有如下常用递推式:

\[C_n=\begin{cases}1&n=0\\\sum_{i=1}^{n}C_{i-1}C_{n-i}&n\ge1\end{cases} \]

\[C_n=\dfrac{C_{n-1}(4n-2)}{n+1} \]

以及上面推导过程中的作差式。

相关应用

这类问题通常可以转化为引入部分的网格图路径方案数计数

  1. 一个无限大的栈,进栈序列为 \(1,2,3,\cdots,n\),则其有多少种不同种出栈序列?

    这个比较好处理。根据栈的性质,容易想到 \(y=x\) 的限制在这里的实际意义是栈可为空且不弹空栈,则将进栈抽象为向上走,出栈抽象为向右走,就可以转为一般卡特兰数计数问题了。答案即为 \(C_n\)。

  2. 用 \(n\) 个 \(1\) 和 \(n\) 个 \(-1\) 组成长度为 \(2n\) 的序列 \(a_1,a_2,\cdots,a_{2n}\),求有多少种方案使得数列前缀和恒为非负整数。

  3. 有 \(2n\) 个人排队进剧场。入场费 \(5\) 元,\(n\) 个人只有有 \(5\) 元钞票,而剩下 \(n\) 人只有 \(10\) 元钞票,且售票处初始无零钱。问有多少种合理入场方式。

  4. 由 \(n\) 个无序节点可以构成多少个不同的二叉树?

    这个问题等价于存在多少个有 \(n+1\) 个叶子节点的满二叉树

    一个比较好理解的组合意义是,枚举分配给左右子树的节点个数,然后将两边方案数乘起来求和。这一点实际上对应了上面的常用公式 \((1)\) 的 \(O(n^2)\) 递推式,虽然据说有一种转化为进栈问题的解法,但我不会,就不讲了。

  5. 在一个圆上有 \(2n\) 个点,将它们两两配对连线,求使这 \(n\) 条线段不相交的方法数。旋转视为相同。

    比较经典的题,实际上与**问题 2 **有很大关系,但更像括号匹配?

    由于不考虑旋转,故断环为链,钦定 \(1\) 为起点。则现在问题转化为两两配对使区间不交或包容。容易想到,这样的配对方式与合法括号序列一一对应,按照括号序的套路,问题转化为给 \(n\) 个数赋 \(1\) 其余赋 \(-1\),求使前缀和不为负数的方案数。然后没了,答案即为 \(C_n\)。

  6. 问在 \(n-1\) 条对角线不相交的情况下,将一个凸 \(n+2\) 边形分成不重叠三角形区域的方法数?

    最为经典的题。首先由问题 5 得出:

    引理 1 由 \(n\) 对括号组成的合法括号序个数为 \(C_n\)。

    但是这道题中,点是可以重合的,而非纯纯配对问题,需要想想转化。

    当然,这个解也可以看作 \(n+1\) 个数的不同相乘顺序数目,根据具体操作进而转化为有 \(n+1\) 个叶子节点的满二叉树个数。(欸?好像知道了什么……

    这也就是:

    引理 2 \(n+1\) 个数可以有 \(C_n\) 种不同相乘顺序。

    如此一来,我们便可以得到一种非常妙的对应关系。

    将原凸多边形的顶点按照逆时针标记为 \(1,2,\cdots,n+2\),并将与点 \(i\) 逆时针相邻的边赋值为 \(i\)。从点 \(1\) 开始逆时针遍历,与当前点相连的所有对角线,被访问过的记为右括号加入序列,未被访问过的记为左括号加入序列,在走边的时候则加入边权,如此一来便得到了一个相乘顺序。而注意到边 \(n+2\) 恰好在最末尾,可以忽略不计,因此所有连对角线方式与一个 \(n+1\) 个元素的相乘顺序形成单射,由引理 2 方法数总和为 \(C_n\)。

斯特林数

第二类斯特林数

似乎是因为第一类提的少用的少,所以把第二类放前面讲了。

第二类斯特林数,又称斯特林子集数,记为 \(S(n,k)\) 或 \(n\brace k\),表示将大小为 \(n\) 的集合划分为 \(k\) 个无区别非空集合的方案数。

递推式

\[{n\brace k}=\begin{cases}[n=0]&k=0\\{n-1\brace k-1}+k{n-1\brace k}&k\ge1\end{cases} \]

考虑往大小为 \(n-1\) 的集合里面插入一个新的数,则有如下两种方案:

  • 单独作为一个新集合,则集合数目在此加一,由 \(n-1\brace k-1\) 直接转移过来;
  • 将这个数记入旧集合,显然集合数不变,用\(n-1\brace k\)乘上当前放置方案数即可。

通项公式

\[{n\brace m}=\sum_{i=0}^m\dfrac{(-1)^{m-i}i^n}{i!(m-i)!} \]

其实也是卷积形式。直接考虑二项式反演。假设有 \(n\) 个数,分成 \(i\) 个集合,记 \(G_i\) 为可以为空集的方案数,\(F_i\) 为不可以为空集的方案数。那么:

\[\because G_i=i^n=\sum_{j=0}^i\binom ijF_j\\\begin{aligned}\therefore F_i&=\sum_{j=0}^i\binom ij(-1)^{i-j}G_j\\&=\sum_{j=0}^i\binom ij(-1)^{i-j}j^n\\&=\sum_{j=0}^i\dfrac{(-1)^{i-j}j^ni!}{j!(i-j)!}\end{aligned} \]

然后由于第二类斯特林数要求集合无序,将 \(F_n\) 除以 \(n!\) 就是答案了。或者也可以从一个很有组合意义的式子二项式反演得到:

\[n^{m} = \sum_{k = 0}^{m} {n \brace k} \binom{n}{k} k! \]

不难看成 \(n\) 个球放 \(m\) 个盒子,枚举有几个盒子放就好了。同时,这个式子也是很有用的,对于一些要求 \(\mathcal{O}(k)\) 转移 \(f(S)^{k}\) 的毒瘤计数 DP 会用到,因为直接二项式定理会是 \(\mathcal{O}(k^{2})\),在北京集训笔记和做题记录里有提到。

第一类斯特林数

又称斯特林轮换数,如其名,把第一类斯特林数中的集合换成轮换即为定义,记为 \(n\brack k\)。轮换是一个首尾相接的排列,也就是说,它有顺序,但无相对顺序,有点抽象。

递推式

\[{n\brack k}=\begin{cases}[n=0]&k=0\\{n-1\brack k-1}+(n-1){n-1\brack k}&k\ge1\end{cases} \]

同样由组合意义证明。考虑新加一个数,有如下两种情况:

  • 单开一个轮换,继承自 \(n-1\brack k-1\);
  • 放到之前一个轮换中,注意到有序,故系数为 \(n-1\)。

然后没了。

重要应用

同行/同列斯特林数计算是多项式的,不管了。

阶乘幂

定义下降幂 \(x^{\underline n}=\frac{x!}{(x-n)!}=\prod_{k=0}^{n-1}(x-k) = \dbinom{n}{k} k!\)。那么从上上面的式子,有方幂到下降幂的转化式为:

\[x^{n} = \sum_{k = 0}^{n} {n \brace k} x^{\underline k} \]

同理存在上升幂转方幂为:

\[x^{\overline n} = \sum_{k = 0}^{n} {n \brack k} x^{k} \]

证明可以考虑从第二个式子入手,数学归纳。应该会整出个有趣的递推式:

\[\begin{aligned}(x+1)^{\underline n}&=\prod_{k=0}^{n-1}(x+1-k)\\&=(x+1)x(x-1)\cdots(x-n+2)\\&=(x+1)\prod_{k=0}^{n-2}(x-k)\\&=(x+1)x^{\underline{n-1}}\end{aligned} \]

斯特林反演

有没有发现方幂与阶乘幂的转化是单向的,那是因为证明需要一个叫斯特林反演的东东。

\[\begin{aligned} g_{n} &= \sum_{i = 0}^{n} {n \brace i} f_i \\ f_{n} &= \sum_{i = 0}^{n} (-1)^{n - i} {n \brack i} g_{i} \end{aligned} \]

证明的前置芝士叫做反转公式:

\[\sum_{i = m}^{n} (-1)^{n - i} {n \brack i} {i \brace m} = [n = m] \\ \sum_{i = m}^{n} (-1)^{n - i} {n \brace i} {i \brack m} = [n = m] \]

考虑建立两种阶乘幂之间的关系。大眼观察可只,存在:

\[x^{\underline n} = (-1)^{n} (-x)^{\overline n} \\ x^{\overline n} = (-1)^{n} (-x)^{\underline n} \]

\[\begin{aligned} \therefore n^{m} &= \sum_{k = 0}^{m} {m \brace k} n^{\underline k} \\ &= \sum_{k = 0}^{m} {m \brace k} (-1)^{k} (-n)^{\overline k} \\ &= \sum_{k = 0}^{m} {m \brace k} (-1)^{k} \sum_{j = 0}^{k} {k \brack j} (-n)^{j} \\ &= \sum_{j = 0}^{m} n^{j} (\sum_{k = j}^{m} {m \brace k} {k \brack j} (-1)^{k - j}) \end{aligned} \]

于是证完了一个反转公式,另一个同理可得。那么接下来的反演公式证明就是 trivial。当然,阶乘幂与方幂的转换也可以轻松证明。


上头整了个斯特林反演,把剩下的都记一下。实际上会注意到很多反演的证明都是展开……所以除了比较重要的证明,就只记式子了。

upd:发现还是有很多好用的推论的,也一并记上吧 qwq。

二项式反演

对于目标大小 \(n\),设 \(f(x)\) 为 \(x=n\) 的答案,\(g(x)\) 为 \(x\le n\) 的答案。

\[\begin{aligned} g_{n} &= \sum_{i = 0}^{n} \binom{n}{i} f_{i} \\ f_{n} &= \sum_{i = 0}^{n} (-1)^{n - i} \binom{n}{i} g_{i} \end{aligned} \]

常用于容斥定理中。

莫比乌斯反演

莫比乌斯反演的本质:

\[\begin{aligned}g&=I*f\\f&=I^{-1}*g\\&=\mu*g\end{aligned} \]

I. 嵌入形式

\[[m\mid n]\sum_{d\mid\frac nm}\mu(d)=[n=m] \]

II. 约数形式

\[\begin{aligned}g(n)&=\sum_{d\mid n}f(d)\\f(n)&=\sum_{d\mid n}\mu(d)g(\dfrac nd)\end{aligned} \]

III. 倍数形式

\[\begin{aligned}g(n)&=\sum_{n\mid d}f(d)\\f(n)&=\sum_{n\mid d}\mu(\dfrac dn)g(d)\end{aligned} \]

又作

\[\begin{aligned}g(n)&=\sum_k^\infty f(nk)\\f(n)&=\sum_k^\infty\mu(k)g(nk)\end{aligned} \]

通常还是有个上界的……

常用推论/式子:

  1. 单位函数,判别 \(\gcd\) 时可以用。在化简式子的时候可以把 \(\varepsilon\) 提到前面,这样原本用于 \(n\) 的求和计数就可以用除法代替了。

\[\begin{aligned}\varepsilon&=\mu*1\\\varepsilon(n)&=\sum_{d\mid n}\mu(d)=[n=1]\end{aligned} \]

子集反演

对于目标集合 \(S\),设 \(f(T)\) 为 \(T=S\) 的答案,\(g(T)\) 为 \(T\subseteq S\) 的答案。

\[\begin{aligned}g(S)&=\sum_{T\subseteq S}f(T)\\f(S)&=\sum_{T\subseteq S}(-1)^{|S|-|T|}g(T)\end{aligned} \]

当 \(g\) 的定义刚好相反时,把 \(S,T\) 互换即可。

一些理解与技巧:

子集反演更像是二项式反演的一个特化版本,严谨的来说,\(\forall|S|=|T|\land f_S=f_T\) 时子集反演的本质就是二项式反演。

一个常见推式子的技巧就是把子集贡献提到开头,这样剩下的部分就由不同变为相同,方便计算。同时,在反演的证明中,有一个感性理解很重要:

\(\sum_{R\sube T\sube S}(-1)^{|S|-|T|}=[R=S]\)。证明:

  • 当 \(R=S\) 时,显然 \(\sum=(-1)^0=1\);
  • 否则,考虑 \(R\) 以外若干元素(设有 \(k\) 个),任意钦定一个,那么对于剩下元素组成的 \(2^{k-1}\) 种状态,被钦定的元素都有选或不选两种,正好给集合带来 \(\pm1\) 的贡献,于是总和为 \(0\)

似乎可以用来理解 SOS-DP 和 FWT?

\(\min\)-\(\max\) 容斥

\[\max_{i \in S} x_{i} = \sum_{T \subseteq S} (-1)^{\lvert T \rvert - 1} \min_{j \in T} x_{j} \\ \min_{i \in S} x_{i} = \sum_{T \subseteq S} (-1)^{\lvert T \rvert - 1} \max_{j \in T} x_{j} \]

证明考虑普通容斥。重点在于,由于期望的线性性(即考虑这么计算期望:\(E(\max_{i \in S} x_{i}) = \sum_{y} P(x = y) \max_{j \in S} y_{j}\)),这个玩意儿在期望意义下成立:

\[E(\max_{i \in S} x_{i}) = \sum_{T \subseteq S} (-1)^{\lvert T \rvert - 1} E(\min_{j \in T} x_{j}) \\ E(\min_{i \in S} x_{i}) = \sum_{T \subseteq S} (-1)^{\lvert T \rvert - 1} E(\max_{j \in T} x_{j}) \]

\(k\)-th \(\max\)-\(\min\) 容斥:

\[k \text{th} \max_{i \in S} x_{i} = \sum_{T \subseteq S} (-1)^{\lvert T \rvert - k} \binom{\lvert T \rvert}{k - 1} \min_{j \in T} x_{j} \]

单位根反演

\[[n \mid k] = \frac{1}{n} \sum_{i = 0}^{n} \omega_{n}^{i k} \]

证明考虑简单等比数列求和。用来求给定一个多项式,求特定倍数位上的系数和,也就是:

\[\begin{aligned} \sum_{i} [x^{i k}]f(x) &= \sum_{i} [k \mid i] \, [x^{i}]f(x) \\ &= \sum_{i} [x^{i}]f(x) \frac{1}{k} \sum_{j = 0}^{k - 1} \omega_{k}^{i j} \\ &= \frac{1}{k} \sum_{j = 0}^{k - 1} \sum_{i} a_{i} (\omega_{k}^{j})^{i} \\ &= \frac{1}{k} \sum_{j = 0}^{k - 1} f(\omega_{k}^{j}) \end{aligned} \]

能用来证 IDFT 的正确性,虽然单位根反演就是从这里揪出来的。感觉没有优化时间复杂度?

拉格朗日反演

咕。

离散傅里叶变换

咕咕咕。

标签:end,sum,笔记,学习,反演,计数问题,binom,aligned,brace
From: https://www.cnblogs.com/NianFeng/p/18678642

相关文章

  • base中TCP/IP基础学习笔记
    base中的网络模型的学习笔记一.关于TCP/IP网络模型引言对于同一台设备上的进程间通信,有很多种方式,有管道、消息队列、共享内存、信号等方式,对于不同设备上的进程间通信,就需要网络通信,设备是多样的,所以要兼容各种各样的设备,就协商出了一套通用的网络协议。网络协议是分层......
  • C++基础学习03
    C++基础学习032025-01-1715:59:09星期五关于数组数组有几个特点固定大小相同的数据类型连续存储这点就是说数组在内存中是连续存储的下标访问这点就是我们可以通过[num]的方式来对数组进行访问一般来说,我们使用dataTypearrayName[arraySize]的方式来创建......
  • Pandas使用笔记
    个人学习笔记日期转换索引日期格式:2023-09-1215:00:00转换为:2023-09-12importpandasaspd#假设你的DataFrame名为df,索引是2023-09-1215:00:00#这里创建一个示例DataFrame用于演示data={'value':[1,2,3]}index=pd.to_datetime(['2023-09-1215:00:......
  • 学习第七十二行
    kill不仅可以杀死进程,还可以发送信号哦SIGTERM(15):请求进程正常终止。大多数进程会处理这个信号并进行清理。kill<pid>SIGKILL(9):强制终止进程。进程无法捕获或忽略这个信号。kill-9<pid>SIGINT(2):通常由Ctrl+C触发,向进程发送中断信号。kill-2<pid>SI......
  • Markdown语法学习
    序:Markdown语法学习此篇继建立好自己的博客之后,为了更好的完成今后的学习和记录,学习markdown语法。学习自狂神说。文本编辑器:typora文件后缀:xxx.mdmarkdown语法的优势:标题,字体样式,链接,列表,表格,图片,代码都整合标题way:一级标题就是#+空格+内容,2-6级标题就是多少个#+空格+内......
  • THREE.js学习笔记9——Materials
    这一小节主要学习材质材质用于为几何物理模型的每个可见像素添加颜色。Materialsareusedtoputacoloroneachvisiblepixelofthegeometries.决定每个像素颜色的算法是在程序中编写的,称为着色器。Three.js具有许多带有预制着色器的内置材料。Algorithmsthatdecid......
  • MarkDown学习
    MarkDown学习标题三级标题字体Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说java分割线图片超链接点击跳转到百度列表ABCABC表格名字性别生日张三男1997.1.1代码......
  • [2025.1.18 JavaSE学习]标准I/O流 && 转换流
    标准I/O流System.in:标准输入默认设备:键盘类型:InputStreamSystem.out:标准输出默认设备:显示器类型:PrintStreamSystem.in编译类型为InputStream,而运行类型为BufferedInputStreampublicfinalstaticInputStreamin=null;System.out编译类型为PrintStream,运行类......
  • STM32单片机的学习总结
    从计算机基础、寄存器知识、汇编指令、中断以及各外设驱动的开发,单片机底层经过这段时间的学习做一个总结。计算机组成计算机由输入设备、输出设备、控制器、运算器、存储器组成,存储器分为外部存储器、内部存储器、高速缓存、寄存器,在单片机底层开发中,主要使用寄存器对某一地......
  • 黑马前端学习笔记(1)HTML5篇
    第一天目录第一天1、HTML定义2、标签语法3、HTML基本骨架4、标签的关系5、注释6、排版标签①标题标签②段落标签③换行和水平线标签④文本格式化标签7、图像标签①基本使用②属性8、路径①相对路径-从当前文件位置出发查找目标文件②绝对路径-从盘符出发查找......