组合数学
组合数
多重组合数(其实指的是多重集的排列数),其中保证的是,多项式展开的第项系数即为,平常的二项式系数也就对应着二重集的情况。
而多重集的组合数就会比较复杂,前面只是个种元素排一排,现在我们是选出个来排,如果比所有的都小的话,那每种的物品都随便选,相当于有多少非负整数解,那就是隔板法。
接着,对于某些个的情况来说,考虑为满足某个集合:
,
不相邻排列
选个,任意两个不相邻的方案数:倒着想,考虑往个球的个空里面塞个球,最后给它们标上号,方案就是我们要的
另一种是考虑一个符合条件的序列对应着排完序之后,任意两个相邻元素相差至少为2,考虑其差分序列有多少种可能,进一步考虑这样的序列:,然后在一共个位置填上0到的数字,的前缀和就对应着一个,这个序列之和要不超过。进一步变成再在最后一个位置加一个空,这里塞0到的数字使得这么多数字之和恰好是。于是变成个的数之和要凑成,那就经典隔板法,答案.
错排
记个的答案为,假设第个信箱还是放第封信,对于的情况考虑两种转移:①前个信封全都装错。②前个信封有且仅有一个信封没错,除此之外不会有别的可能能够一步转移到,第一种的方案数是(前个和换都能得到一个新的错排)。第二种情况则是选择那个“没错的”信封,和它交换,而这个没错的位置也有种,方案数
于是
圆排列
个人选个人出来,围一圈的排列数,无非就是破环成链,如果并且不考虑顺逆时针的话,方案数再除个2.
组合数恒等式
首先是的可以是任意实数,然后一般认为是非负整数,如果整个定义为0.
根据定义给出的对称恒等式:.
进一步可以得到类似于,当然这用定义也很好推)
接着比较有用的是一些求和式子,比如,对这个式子不断展开:
一种是每次把那个二项式系数展开,这会得到
另一种是每次把的拿一个二项式系数展开,这样最后得到的是一串下指标一样的东西:
,对应着组合意义:右边是从个数里选个出来,左边是枚举最大值为的情况下的方案数。
对于上指标是负数的情况一般有如下转化:
也就是化成相关的式子,一般叫上指标反转(加了个负号嘛),遇到这种形式的时候经常可以用得上:
比如我们算,最后一步利用了之前的求和式子,当然这个还能进一步化成。
卡特兰数
非常经典的东西,比如个括号的括号序列合法的方案数,个元素合法的出入栈方案数,从走到始终保持的方案数,+1和-1组成的序列中所有前缀和非负,并且总和为0的方案数…
他们的方案数都是,
也经常写成
当然也有递推式:
前几项
关于证明,一种说明的方法是考虑所有+1,-1组成的,并且和为0的序列,考虑每个不合法的集合跟另一个集合的映射关系:像是+1,-1,-1,+1,-1,+1,找到他第一个前缀小于0的位置,这意味着内有个-1,以及个+1,同时内有个+1和个-1,然后把这一段序列取反,新的序列有个+1,以及个-1。
接着不难证明,任何一个非法序列都对应着一个由个和个组成的序列。
于是。
模型
个叶节点的满二叉树
首先不难证明,个叶节点的满二叉树,边一共有条,我们考虑任意一颗这样的二叉树从树根开始dfs,并且先左后右,同时对应一个序列,往左的时候+1,往右的时候-1。因为是满二叉树,所以一定是前缀和非负,且总和为0。
同时每个这样的序列也对应这样的树。
个叶节点的满二叉树的个数为
栈/+1,-1交替序列/合法括号序列/单调网格路径:
个元素合法的出入栈序列,任意前缀和非负且总和为0的+1,-1序列,对括号的合法括号序列,的网格,从到的所有路径里,所有点都位于或高于主对角线的路径。
方案数都是卡特兰数。
带标号的凸多边形,三角形分割的方案数:,对于更一般地情况,考虑先按顺序给顶点编号成到,考虑选择多边形上的任意一条边,它一定会被分割成为某个三角形的一条边,那我们考虑这个三角形的另一个点可以是所有剩余的个点,同时这一刀下去就把边形分成了一个三角形,以及两个凸多边形。
于是给出递推式
然后取,则,又,这就是卡特兰数
圆上个有序的点,条线连接所有点对,使得线两两不相交的方案数:
(另一个有意思的场景是说,个人围一桌,有多少种可以让每个人同时和别人握手)
类似上面多边形三角分割的方案数,随便拿一个点出来考虑它和谁握手,然后把剩下个点分割成两个部分,而且每个部分必须是偶数个点,于是记是规模为的问题,
生成函数
记
能用递推式推出通项,懒得写了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律