组合数学学习笔记
组合数学常用公式
基本公式
- 排列:
Arn=n!(n−r)!
- 组合:
Crn=n!r!(n−r)!(nr)=n!r!(n−r)!
- 二项式定理:
n∈N,(x+y)n=n∑k=0(nk)xkyn−k
- 广义二项式定理:
若
|x|<1,α∈R
则
(1+x)α=∞∑k=0(αk)xk
这里 (αk):=αk––k! 。当 |x|≥1 时,右侧幂级数不一定收敛。
组合公式
- 杨辉恒等式:
(nm)=(n−1m)+(n−1m−1)
- 等效代换:
(nm)=(nn−m)
- 连续应用1:
(n+r+1r)=r∑i=0(n+ii)
- 组合意义:
(nm)(mr)=(nr)(n−rm−r)
- 4中 r=1 时的特例:
(nm)(m1)=(n1)(n−1m−1)m(nm)=n(n−1m−1)
- 组合意义:
(n+mr)=r∑i=0(ni)(mr−i)
- 性质5与二项式定理:
n∑i=0i(ni)=n2n−1
常用数及其推论
第一类斯特林数
排成 k 个圆排列也就是 1∼n 排列的个数,满足 i 向 pi 连边后,形成 k 个环的图。我们用 [nm] 来表示 n 个节点,m 个环的斯特林数。
考虑递推意义,有一下两种情况:
-
新加入的点自己成为一个新环,方案数为 [n−1m−1]。
-
新加入的点加在了任意一个原有的环中的任意一个点的后续,方案数为 (n−1)[n−1m]。
总递推式为 [nm]=[n−1m−1]+(n−1)[n−1m]。
第二类斯特林数
将 n 个元素划分到 m 个集合的方案数,集合不能为空。我们用 {nm} 来表示 n 个元素,m 个集合的斯特林数。
依旧是考虑递推意义,有两种情况:
-
和第一类斯特林数一样,新加入的元素自己成为一个新集合,方案数为 {n−1m−1}。
-
新元素加入任意一个已有集合,方案数为 m{n−1m}
总递推式为 {nm}={n−1m−1}+m{n−1m}。
卡特兰数
卡特兰数是以下四类问题的通解:
-
n 个数 1,2,3,…,n 依次进栈,问有多少种不同的出栈序列。
-
求长为 2n 的合法括号序列的数量。
-
求 2n+1 个点,每个非叶子节点都恰好有两个儿子的有根、无标号、区分左右儿
子的二叉树个数。
-
给定 (n+1)2 的网格图,问有多少种 (1,1) 到 (n+1,n+1) 的路径使
得其不越过对角线。
问题转化:
-
入栈为 +1,出栈为 −1,过程中序列操作值保证大于等于 0。
-
左括号 +1,右括号 −1,同问题 1。
-
在 dfs 整棵树时,左儿子为左括号,右儿子为右括号,转化为问题2。
-
向右走为左括号,向上走为右括号,转化为问题 2。
这个问题的答案称作卡特兰(Catalan)数 Cn。
我们通过问题4来求出卡特兰数的表达式:
若没有对角线的限制,方案数为 (2nn)。
若接触了次对角线 y=x+1,则从其第一次接触的位置起关于这条对角线对称,终点变为 (n−1,n+1),不合法路径与 (1,1) 到 (n−1,n+1) 的路径一一对应,所以 Cn=(2nn)−(2nn−1)=(2nn)n+1。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具