组合计数课程笔记(二):十二重计数法(初等计数)
组合计数问题是组合数学中重要的最古典的分支。有人将组合计数问题归为
十二重计数法
在数学上,严谨的定义是“从一个集合对另一个集合的映射的个数”。但是我们可以用更简单的方法定义它:把
首先,我们根据集合的性质来进行分类。对集合
其次,我们按照映射的性质来分类,分为“不受限”“单射”和“满射”。也就是,每个盒子随便装、最多装一个、最少装一个。
这样,我们列出一张
不受限 | 单射 | 满射 | ||
---|---|---|---|---|
区分 | 区分 | |||
不区分 | 区分 | |||
区分 | 不区分 | |||
不区分 | 不区分 |
计数公理
映射法则
对于集合
-
是单射,则 -
是满射,则 -
是双射,则
法则本身的内容只涉及第三条,剩余两条是补充的。其意义在于如果两个集合中的所有元素一一对应,则两者元素数量相同。
实际上,双射法则常常出现在很多的定义中,
乘法法则
不同的代数对象有不同的乘法法则,例如生成函数中的乘法法则就和集合计数的乘法法则不同。
两个集合的笛卡尔积
乘法法则的应用情形是比较好判断和容易使用的。
加法法则
两个不相交的集合
加法法则则不好运用,因为其满足的条件相较苛刻,应用情形难以直观看出,更具技巧性。
组合数
子集总数
组合数是有穷集合的子集。
定义
我们证明
组合的证明方法是把
具体而言,对于
或者,我们定义
则前后无交集且存在双射,都是
所以
而且
现在我们在解的是比较简单的线性递推式,那么别的线性递推呢?例如
这就需要使用生成函数的知识解决,例如我的这篇博客讲解了斐波那契数列的通项。
子集
我们定义
十二重计数法
我们定义
根据乘法原则,它的
那么我们定义
那么,映射的个数就是
我们还是找到
我们考虑别的方法,我们发现,确定第一位的时候有
至于严格论证,我们需要链式法则,它不包含于上述法则中,因为它是另一种积而非笛卡尔积,涉及条件概率。
先看
然后,我们发现这是一个满射。满射具有什么样的性质呢?对于满射
那么,假设我们找到了集合划分问题的一组解
先看
然后,我们构造
我们知道,有序的
那么,我们假设集合
那么,应用乘法原理和双射原理,得到
我们就定义
-
元集的所有子集 到每个 的补集形成双射,所以 。 -
设
表示 的大小为 的子集的集合,那么 。所以
二项式定理
这个可以通过简单的在中项中选
通过二项式定理,如果我们令
二项式定理的最大的意义在于,我们用加法和乘法这样基础的代数运算的有机结合,创造出了复杂特殊的具有组合意义的组合数。这种用简单运算组合生成想要的量的思想,为生成函数的涌现埋下了刚刚生出的幼芽。
找到问题
它属于一个巨大类问题的特殊形式:线性规划。
整数线性规划是给定
我们可以用插板法。更加严谨的证明,我们需要构造双射。
明显的,右边的每个数都不同,并且都小于
先看
然后的部分非常简单,我们枚举有多少个集合是空的,答案就是
这个问题是平凡的,答案为
这个问题等价于集合划分,也就是对
我们也将这个问题称为
同时,还有
第二类斯特林数有一个递推公式,通过简单的
先看
然后我们枚举几个划分是
和
无序的整数划分,也就是找到一组
我们设
-
如果
,我们去掉 并不会影响答案 -
如果
,所有的 都大于 ,把它们都减掉 (和减去 )也不会影响答案。
所以
我们想办法逼近一下
首先,用
也就是
然后再构造一个单射,我们发现,如果我们把
在构造的过程中,我们一共给数加上了
由此又得到
实际上,这个范围就是初等计数所能达到的终点了,它象征着一个时代的终点,用一把斧头就能劈开前路的情况已然不再,没有舟船,谁也无法度过汪洋大海。
你只得到此,不能逾越
拉努马金的研究告诉我们
在
埋下的种子将发芽。
相关的其他计数
可重集的 元子集
我们现在有一个集合
但是,如果我们需要的是它的可重子集呢?那就可以是
要计算可重子集的个数,先要明确可重集的定义。
可重集是从集合
我们可以用
我们发现,这个求可重集的
多项式系数
我们考虑多重集
形式化的,对于集合
同时,有多项式定理:
这也是一种形式的代数生成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)