首页 > 其他分享 >组合数学

组合数学

时间:2024-03-23 14:45:31浏览次数:14  
标签:bmatrix begin end 组合 limits sum 数学 Bmatrix

二项式反演

形式

形式 \(1\):

\[f(n)=\sum\limits_{i=0}^{n}(-1)^i\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum\limits_{i=0}^{n}(-1)^i\binom{n}{i}f(i) \]

形式 \(2\):

\[f(n)=\sum\limits_{i=0}^{n}\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum\limits_{i=0}^{n}(-1)^{n-i}\binom{n}{i}f(i) \]

形式 \(3\):

\[f(n)=\sum\limits_{i=n}(-1)^i\binom{i}{n}g(i)\Leftrightarrow g(n)=\sum\limits_{i=n}(-1)^{i}\binom{i}{n}f(i) \]

形式 \(4\):

\[f(n)=\sum\limits_{i=n}\binom{i}{n}g(i)\Leftrightarrow g(n)=\sum\limits_{i=n}(-1)^{i-n}\binom{i}{n}f(i) \]

把右边的东西带到左边里面就能证了。

应用

可以解决关于“钦定”的问题?

斯特林数

oiwiki

有两类,分开说。

第二类斯特林数

虽然被称作「第二类」,第二类斯特林数却在斯特林的相关著作和具体数学中被首先描述,同时也比第一类斯特林数常用得多。

第二类斯特林数(斯特林子集数) \(\begin{Bmatrix}n\\ k\end{Bmatrix}\),表示将 \(N\) 个两两不同的元素,划分为 \(k\) 个相同非空子集的方案数。

递推式

\[\begin{Bmatrix}n\\m\end{Bmatrix} = \begin{Bmatrix}n-1\\m-1\end{Bmatrix} + m\begin{Bmatrix}n-1\\m\end{Bmatrix} \]

边界为:\(\begin{Bmatrix}n\\0\end{Bmatrix}=[n=0]\)。

利用组合意义证明。考虑第 \(n\) 个球的放置:

  1. 在原有 \(m-1\) 个盒子的情况下开一个新盒子,把第 \(n\) 个球放进去,方案数为 \(\begin{Bmatrix}n-1\\m-1\end{Bmatrix}\)。

  2. 在原有 \(m\) 个盒子的情况下,把第 \(n\) 个球放进其中一个盒子,方案数为 \(m\begin{Bmatrix}n-1\\m\end{Bmatrix}\)。

根据加法原理,加一下就有了递推式。

通项公式

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\sum\limits_{i=0}^{m}\frac{(-1)^{m-i}i^n}{i!(m-i)!} \]

设有 \(n\) 个不同的球,放进 \(i\) 个不同的盒,

  • 允许空盒的方案数为 \(G_i\)。
  • 不允许空盒的方案数为 \(F_i\)。

显然有:

\[G_i=i^n\\G_i=\sum\limits_{j=0}^{i}\binom{i}{j}F_j \]

根据二项式反演,有:

\[\begin{aligned}F_i&=\sum\limits_{j=0}^{i}(-1)^{i-j}\binom{i}{j}G_j\\&=\sum\limits_{j=0}^{i}(-1)^{i-j}j^n\frac{i!}{j!(i-j)!}\end{aligned} \]

考虑 \(F_m\) 和 \(\begin{Bmatrix}n\\m\end{Bmatrix}\) 的关系,第二类斯特林数要求盒子相同,所以显然有 \(F_m=m!\cdot \begin{Bmatrix}n\\m\end{Bmatrix}\),除掉 \(m!\) 以去掉标号。

于是:

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\sum\limits_{i=0}^{m}\frac{(-1)^{m-i}i^n}{i!(m-i)!} \]

同一行的计算

P5395 第二类斯特林数·行

即为给定 \(n\),求:

\[\begin{Bmatrix}n\\0\end{Bmatrix},\begin{Bmatrix}n\\1\end{Bmatrix},\begin{Bmatrix}n\\2\end{Bmatrix},\dots,\begin{Bmatrix}n\\n\end{Bmatrix} \]

的值。

算两个数组:

\[f_i=\frac{i^n}{i!},g_i=\frac{(-1)^i}{i!} \]

把 \(f\) 和 \(g\) 卷积就行了。

提交记录

同一列的计算

P5396 第二类斯特林数·列

给定 \(n,k\),求:

\[\begin{Bmatrix}0\\k\end{Bmatrix},\begin{Bmatrix}1\\k\end{Bmatrix},\begin{Bmatrix}2\\k\end{Bmatrix},\dots,\begin{Bmatrix}n\\k\end{Bmatrix} \]

的值。

回想例题 P5748 集合划分计数,这个例题其实就是同一行第二类斯特林数求和。我们考虑通过 EGF 求解本题。

只有一个盒子且必须放,我们构造数列 \(a=\langle0,1,1,1,\dots\rangle\),它的第 \(n\) 项表达将 \(n\) 个不同的球放进一个盒子里的方案数。

由于我们盒子必须放东西,所以 \(a_0=0\)。

我们能求出 \(a\) 的 EGF:\(\hat F(x)=\sum\limits_{i\ge 1}\dfrac{x^i}{i!}=e^x-1\)。

在那个题的学习中,我们知道了:

  1. \(\hat F(x)^k\) 表示不同的/有标号的球放进 \(k\) 个不同的/有标号的盒子的生成函数。
  2. \(\dfrac{\hat F(x)^k}{k!}\) 表示不同的/有标号的球放进 \(k\) 个相同的/无标号的盒子的生成函数。

于是乎,我们就有:

\[\begin{Bmatrix}i\\k\end{Bmatrix}=\left[\frac{x^i}{i!}\right]\frac{\hat F(x)^k}{k!} \]

其中 \(\left[\dfrac{x^i}{i!}\right]\) 的含义为 \(x^i\) 项的系数乘以 \(i!\)。

于是我们多项式快速幂算出 \(\hat F(x)^k\) 即可。

注意,这里 \(\hat F(x)^k\) 的常数项为 \(0\),不能直接 \(\ln \exp\) 做,但一次项是 \(1\),所以我们可以提一个 \(x^k\) 出来,就能做了。

提交记录

oiwiki 上还说,\(e^{\hat F(x)}\),也就是同一行求和,就是贝尔数的生成函数。贝尔数是啥我都不知道。

性质

  1. \(m^n=\sum\limits_{i=0}^{m}\begin{Bmatrix}n\\i\end{Bmatrix}i!\dbinom{m}{i}\)

第一类斯特林数

第一类斯特林数(斯特林轮换数) \(\begin{bmatrix}n\\ k\end{bmatrix}\),表示将 \(n\) 个两两不同的元素,划分为 \(k\) 个相同非空轮换的方案数。

一个轮换就是一个首尾相接的环形排列。我们可以写出一个轮换 \([A,B,C,D]\),并且我们认为 \([A,B,C,D]=[B,C,D,A]=[C,D,A,B]=[D,A,B,C]\),即,两个可以通过旋转而互相得到的轮换是等价的。注意,我们不认为两个可以通过翻转而相互得到的轮换等价,即 \([A,B,C,D]\neq[D,C,B,A]\)。

递推式

\[\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+(n-1)\begin{bmatrix}n-1\\m\end{bmatrix} \]

边界为 \(\begin{bmatrix}n\\0\end{bmatrix}=[n=0]\)。

利用组合意义证明。考虑第 \(n\) 个元素的放置:

  1. 在原有 \(m-1\) 个轮换的情况下开一个新轮换,把第 \(n\) 个元素放进去,方案数为 \(\begin{bmatrix}n-1\\m-1\end{bmatrix}\)。

  2. 在原有 \(m\) 个轮换的情况下,把第 \(n\) 个球放进其中一个轮换,方案数为 \((n-1)\begin{bmatrix}n-1\\m\end{bmatrix}\)。

根据加法原理,加一下就有了递推式。

通项公式

没有。

同一行的计算

P5408 第一类斯特林数·行

即为给定 \(n\),求:

\[\begin{bmatrix}n\\0\end{bmatrix},\begin{bmatrix}n\\1\end{bmatrix},\begin{bmatrix}n\\2\end{bmatrix},\dots,\begin{bmatrix}n\\n\end{bmatrix} \]

的值。

我们搞出来 OGF:

\[F_n(x)=\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}x^i \]

根据递推公式,有:

\[F_n(x)=(n-1)F_{n-1}(x)+xF_{n-1}(x) \]

于是有:

\[F_n(x)=\prod\limits_{i=0}^{n-1}(x+i)=x^{\overline{n}} \]

那么上升幂咋求?????

我们考虑分治。因为上升幂满足:

\[x^{\overline{2n}}=x^{\overline{n}}\cdot (x+n)^{\overline{n}} \]

假如说当前已经求出 \(f(x)\) 的各项系数,我们考虑如何计算 \(f(x+n)\) 的各项系数。这个搞明白了用上面式子随便写写就行了(注意考虑 \(n\) 为奇数时最后面还有一项 \((x+n-1)\))。

我们有(\(a\) 为 \(f(x)\) 的各项系数):

\[f(x+n)=\sum\limits_{i=0}^{n}a_i(x+n)^i \]

二项式定理展开:

\[f(x+n)=\sum\limits_{i=0}^{n}a_i\sum\limits_{j=0}^{i}\binom{i}{j}n^{i-j}x^j \]

更换枚举顺序:

\[f(x+n)=\sum\limits_{j=0}^{n}x^j\sum\limits_{i=j}^{n}a_i\binom{i}{j}n^{i-j} \]

把二项式拆开:

\[f(x+n)=\sum\limits_{j=0}^{n}\frac{x^j}{j!}\sum\limits_{i=j}^{n}\frac{i!a_in^{i-j}}{(i-j)!} \]

我们令 \(A(x)=x!a_x\),\(B(x)=\dfrac{n^x}{x!}\),于是有:

\[f(x+n)=\sum\limits_{j=0}^{n}\frac{x^j}{j!}\sum\limits_{i=j}^{n}A(i)B(i-j) \]

枚举 \(i-j\):

\[f(x+n)=\sum\limits_{j=0}^{n}\frac{x^j}{j!}\sum\limits_{i=0}^{n-j}A(i+j)B(i) \]

此时我们考虑把 \(A\) 翻转,即 \(A'(n-x)=A(x)\),于是有:

\[f(x+n)=\sum\limits_{j=0}^{n}\frac{x^j}{j!}\sum\limits_{i=0}^{n-j}A'(n-j-i)B(i) \]

于是我们把 \(A'\) 和 \(B\) 求个卷积,设 \(C=A'\times B\),原式就成了:

\[f(x+n)=\sum\limits_{j=0}^{n}\frac{C(n-j)}{j!}x^j \]

这样就得出了 \(f(x+n)\) 的各项系数了!

提交记录

同一列的计算

P5396 第二类斯特林数·列

给定 \(n,k\),求:

\[\begin{bmatrix}0\\k\end{bmatrix},\begin{bmatrix}1\\k\end{bmatrix},\begin{bmatrix}2\\k\end{bmatrix},\dots,\begin{bmatrix}n\\k\end{bmatrix} \]

的值。

我们用 EGF 搞搞。

首先考虑 \(i\) 个球放进 \(1\) 个轮换里的 EGF。

\(m\) 个球放进一个轮换里的方案是多少?可以先考虑 \(m\) 个球的排列数,显然为 \(m!\),而其中每 \(m\) 个排列在轮换意义下会等价,故方案数为 \(\dfrac{m!}{m}=(m-1)!\)。

于是就可以写出来 EGF 了:

\[\hat F(x)=\sum\limits_{i=1}^{n}\frac{(i-1)!x^i}{i!}=\sum\limits_{i=1}^{n}\frac{x^i}{i} \]

思考一下后会有:

  1. \(\hat F(x)^k\) 表示不同的/有标号的球放进 \(k\) 个不同的/有标号的轮换的生成函数。
  2. \(\dfrac{\hat F(x)^k}{k!}\) 表示不同的/有标号的球放进 \(k\) 个相同的/无标号的轮换的生成函数。

于是乎,我们就有:

\[\begin{bmatrix}i\\k\end{bmatrix}=\left[\frac{x^i}{i!}\right]\frac{\hat F(x)^k}{k!} \]

把第二类斯特林数·列的代码改改就行了。

提交记录

卡特兰数

oiwiki

记作 \(H_n\)。

常见公式

\[\begin{aligned}&H_n=\frac{\binom{2n}{n}}{n+1}(n\ge 2,n\in \mathbb{N}_+)\\&H_n=\begin{cases}\sum\limits_{i=1}^{n}H_{i-1}H_{n-i} & n\ge 2,n\in \mathbb{N}_+ \\ 1 & n=0,n=1\end{cases}\\&H_n=\frac{H_{n-1}(4n-2)}{n+1}\\&H_n=\dbinom{2n}{n}-\dbinom{2n}{n-1}\end{aligned} \]

递推式/封闭形式

\[H_n=\sum\limits_{i=0}^{n-1}H_iH_{n-1-i}(n\ge 2) \]

其中 \(H_0=1,H_1=1\)。记起 OGF 为 \(H(x)\)。

构造个方程,去解它的封闭形式:

\[H(x)=1+xH(x)^2 \]

解出来:

\[H(x)=\frac{1\pm \sqrt{1 - 4x}}{2x} \]

经过讨论,舍掉正号:

\[H(x)=\frac{1- \sqrt{1 - 4x}}{2x} \]

然后我们运用牛顿二项式定理啊,双阶乘的化简技巧啊之类的东西展开它,得出:

\[H(x)=\sum\limits_{n\ge 0}\dbinom{2n}{n}\frac{1}{n+1}x^n \]

这样就解出了通项公式。

伯努利数

好的博客

可以用来求自然数幂和。

\[\begin{aligned}&B_0=1\\&B_k=1-\frac{1}{k+1}\sum\limits_{i=0}^{k-1}\binom{k+1}{i}B_i\\&\sum\limits_{j=0}^{m}\binom{m+1}{j}B_j=[m=0]\end{aligned} \]

我们有其 EGF:

\[\sum\limits_{n=0}\frac{B_nx^{n}}{n!}=\frac{x}{e^x-1} \]

可以用 EGF 预处理伯努利数。

有个神奇的定理:

\[\sum\limits_{i=0}^{n-1}i^k=\frac{1}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{i}B_in^{k+1-i} \]

或者说:

\[\sum\limits_{i=0}^{n}i^k=n^k + \frac{1}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{i}B_in^{k+1-i} \]

所以预处理伯努利数,就能 \(O(k)\) 求自然数幂和。

51nod 1258 序列求和 V4

这就是个例题。

提交记录

分拆数

oiwiki

经典例题:P4389 付公主的背包

记 \(p(n,k)\) 为把 \(n\) 拆分成 \(k\) 个正整数之和的方案数,有:

\[p(n,k) = p(n-1,k-1) + p(n-k,k) \]

或者用生成函数求。假如说可以分成的整数集合为 \(D\),有生成函数:

\[F(x)=\prod\limits_{k\in D}\sum\limits_{i=0} x^{ik}=\prod\limits_{k\in D}\frac{1}{1-x^k} \]

其第 \(n\) 项系数为把 \(n\) 拆分成 \(D\) 中的数的方案数。其求法:

\[\begin{aligned} F(x)&=\prod\limits_{k\in D}\frac{1}{1-x^k}\\ &=\exp \sum\limits_{k\in D}\ln \frac{1}{1-x^k}\\ &=\exp \sum\limits_{k\in D}\sum\limits_{i=1}\frac{x^{ik}}{i} \end{aligned}\]

后面可以通过拆贡献计算。推倒与计算过程在多项式习题-付公主的背包中有详细讲。

例题

P5824 十二重计数法

题解真的写的很详细了……我不写了……

提交记录

\[\begin{aligned}\\\\\\\\\\\\\\\\\end{aligned} \]

标签:bmatrix,begin,end,组合,limits,sum,数学,Bmatrix
From: https://www.cnblogs.com/baoyangawa/p/18091109

相关文章

  • CF1933D-Continual Mods【数学思维】
    CF1933D-ContinualMods【数学思维】一、题目大意题目链接https://codeforces.com/contest/1933/problem/D给定一个长度为n的数组a,可以任意改变a的顺序,变成数组b(也可以不改变)!问是否存在一个这样的b,使得\(b_1\)mod\(b_2\)mod...mod\(b_n\)≠0。(注意,是从左......
  • prefer 组合 to 继承
    核心不要多继承,要通过组合的模式进行组合,解耦,非强绑定需求我已有一个CodingService的接口,同时有一个CodingServiceImpl的实现类,接口中定义了createReository,pullCode,pushCode三个方法,CodingServiceImpl实现类里面进行了实现,现在想通过prefer组合to继承的思想,将接口中的3......
  • 高等数学基础篇(数二)之定积分常考题型
    定积分常考题型:一、定积分的概念、性质以及几何意义二、定积分的计算三、变上限积分目录一、定积分的概念、性质以及几何意义二、定积分的计算三、变上限积分一、定积分的概念、性质以及几何意义二、定积分的计算三、变上限积分......
  • 生成函数学习笔记
    生成函数(generatingfunction,简称GF),一般只应用两种:OGF和EGF。OGF和EGF都是定义在一个数列上的。【OGF】【定义】对于一个有限序列\(\{a_i\}(i=0\simN)\),其OGF为\(f(x)=\displaystyle\sum_{i=0}^Na_i\cdotx^i\)。对于一个无限序列\(\{a_i\}\),其OGF为\(f(x)=\d......
  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Copula模型来度量开放式基金的风险,并与其他VaR估计方法的预......
  • 【代码随想录】零钱兑换II(关于组合与排列的区别)
    题目描述分析按动态规划的分析步骤分析的话,代码是不难写出来的,但是写出来后你就会发现,结果不对,多出了很多组合:解决方法:什么都不用改,直接把两个循环调换即可。。代码如下:#include<bits/stdc++.h>usingnamespacestd;intchange(intamount,vector<int>&coins){ i......
  • C++看程序写结果:类继承与类组合,默认与含参的构造先后顺序 易错
    C++类继承与类组合,默认与含参的构造先后顺序 易错这道题原本是没有那么多输出信息的,是我自己加上了调用什么函数的提示。一开始以为就输出两行,一行是构造父类时A:5,一行是构造子类时x=5,A::x=5。#include"bits/stdc++.h"usingnamespacestd;classA{public:A(){......
  • 数学系的数字信号处理:傅立叶级数
    文章目录傅立叶(Fourier)级数1.L2[−......
  • 2023年华数杯国际大学生数学建模竞赛B题社会稳定预警研究求解全过程文档及程序
    2023年华数杯国际大学生数学建模竞赛B题社会稳定预警研究原题再现  人类和所有动物一样,都有趋利避害的本能。人类成为造物之主的关键是,他们比其他动物更善于避免伤害。危机总是潜伏在未来。人类发展史是一部不断超越危机的历史(严耀军,2003)。“居安思危”,衡量和警示社会......
  • PHP+MySQL开发组合:智慧同城便民信息小程序源码系统 带完整的安装代码包以及安装部署教
    当前,城市生活的节奏日益加快,人们对各类便民信息的需求也愈发迫切。无论是寻找家政服务、二手交易,还是发布租房、求职信息,一个高效、便捷的信息平台显得尤为重要。传统的信息发布方式往往存在信息更新不及时、查找困难等问题,无法满足现代都市人的需求。罗峰给大家分享一款智慧同......