首页 > 其他分享 >组合计数课程笔记(二):组合计数

组合计数课程笔记(二):组合计数

时间:2023-02-17 15:23:04浏览次数:48  
标签:双射 法则 映射 组合 笔记 计数 cdots 集合 定义

组合计数问题是组合数学中重要的最古典的分支。有人将组合计数问题归为 \(12\) 个集合映射问题。但是其中有 \(2\) 个是平凡的,所以我们只研究 \(10\) 个。

十二重计数法

在数学上,严谨的定义是“从一个集合对另一个集合的映射的个数”。但是我们可以用更简单的方法定义它:把 \(n\) 个苹果装进 \(m\) 个盒子的方案数。

首先,我们根据集合的性质来进行分类。对集合 \(S\),如果在映射的过程中,我们令打乱 \(S\) 中的数的顺序后得到的映射和原先的映射是等价的,我们就可以把 \(S\) 中的数划分为同一个等价类,这时我们称 \(S\) 中的元素是不区分的。也就是,所有的苹果 \(/\) 盒子都是相同的。因为有两个集合 \(N\) 和 \(M\),所以一共能分 \(4\) 种。

其次,我们按照映射的性质来分类,分为“不受限”“单射”和“满射”。也就是,每个盒子随便装、最多装一个、最少装一个。

这样,我们列出一张 \(3*4\) 的表,表示所有 \(12\) 种问题。不过其中有 \(2\) 个是平凡的。分别是 XI 和 VIII。

\(N\) \(M\) 不受限 单射 满射
区分 区分 I II III
不区分 区分 IV V VI
区分 不区分 VII VIII IX
不区分 不区分 X XI XII

计数公理

映射法则

对于集合 \(S\) 和 \(T\),其中若存在映射 \(f:S\rightarrow T\) 满足:

  • \(f\) 是单射,则 \(|S|\le|T|\)

  • \(f\) 是满射,则 \(|S|\ge|T|\)

  • \(f\) 是双射,则 \(|S|=|T|\)

法则本身的内容只涉及第三条,剩余两条是补充的。其意义在于如果两个集合中的所有元素一一对应,则两者元素数量相同。

实际上,双射法则常常出现在很多的定义中,

乘法法则

不同的代数对象有不同的乘法法则,例如生成函数中的乘法法则就和集合计数的乘法法则不同。

两个集合的笛卡尔积 \(S\times T\) 的定义是 \(\{(a,b)|a\in S,b\in T\}\)

\(|S\times T|=|S|\cdot|T|\)

乘法法则的应用情形是比较好判断和容易使用的。

加法法则

两个不相交的集合 \(S\) 和 \(T\),\(|S\cup T|=|S|+|T|\)

加法法则则不好运用,因为其满足的条件相较苛刻,应用情形难以直观看出,更具技巧性。

组合数

子集总数

组合数是有穷集合的子集。

定义 \([n]\) 的幂集 \(2^{[n]}=\{S|S\subseteq [n]\}\)

我们证明 \(|2^{[n]}|=2^n\)

组合的证明方法是把 \(S\) 表示为一个长 \(n\) 的 \(0/1\) 特征向量(编码集合)。

具体而言,对于 \(i\in [n]\),如果 \(i\in S\),则特征向量的这一位是 \(1\),否则是 \(0\)。我们从而建立了特征向量和子集的双射。而特征向量是 \(\{0,1\}^n\),根据乘法法则,就是 \(2^n\)

或者,我们定义 \(f(n)=|2^{[n]}|\),然后把 \(2^{[n]}\) 表示成 \(\{ S\subseteq [n]|n\in S\}\cup\{ S\subseteq [n]|n\notin S\}\)

则前后无交集且存在双射,都是 \(2^{[n-1]}\)

所以 \(f(n)=2f(n-1)\)

而且 \(2^{\varnothing}=1\) 是良定义的,所以 \(f(n)=|2^n|\)

现在我们在解的是比较简单的线性递推式,那么别的线性递推呢?例如 \(f(n)=a_1f(n-1)+a_2f(n-2)+\cdots+a_kf(n-k)+a_0\)?

这就需要使用生成函数的知识解决,例如我的这篇博客讲解了斐波那契数列的通项。

子集

我们定义 \(\text{k-uniform}\) 为 \({S\choose k}=\{T\subseteq S|\ |T|=k\}\)。它涉及到 \(\text{k-complete hypergraph}\) 的一些内容。

十二重计数法

I:\(\text{Tuples}\)

我们定义 \([m]\) 是小于等于 \(m\) 的正整数的集合,那么 \([m]=\{1,2,\cdots,m\}\)。

根据乘法原则,它的 \(n\) 次笛卡尔积 \([m]^n\) 的大小 \(|[m]^n|\) 就是值域为 \([1,m]\) 的 \(n\) 元组的个数。

那么我们定义 \(f:[n]\rightarrow [m]\),找到 \(f\) 的真值向量 \((f(1),f(2),\cdots,f(n))\),这个向量的集合就和映射的集合建立了双射。同时它还和值域为 \([1,m]\) 的 \(n\) 元组建立了双射。

那么,映射的个数就是 \(m^n\)。

II:\(\text{Permutation}\)

我们还是找到 \(f\) 的真值向量 \((f(1),f(2),\cdots,f(n)\)。但是因为是单射,所以 \((f(1),f(2),\cdots,f(n))\) 是一个排列 \(\pi\),它是 \([m]^n\) 的一个子集。

我们考虑别的方法,我们发现,确定第一位的时候有 \(m\) 种,第二位有 \(m-1\) 种……最终一共有 \(m(m-1)(m-2)\cdots(m-n+1)\) 种。我们记作 \((m)_n\),或者 \(m^{\underline{n}}\),也就是 \(m\) 的 \(n\) 次下降幂。

至于严格论证,我们需要链式法则,它不包含于上述法则众,因为它是另一种积而非笛卡尔积,涉及条件概率。

标签:双射,法则,映射,组合,笔记,计数,cdots,集合,定义
From: https://www.cnblogs.com/jucason-xu/p/17130269.html

相关文章

  • 【IMX6ULL学习笔记】四、 U-BOOT启动流程
    一、链接脚本u-boot.lds详解要分析uboot的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序的链接是由链接脚本来决定的,所以通过链接脚本可以找到程序的入口。......
  • 【IMX6ULL学习笔记】五、U-BOOT移植与解析
    一、移植自定义开发板流程1、添加mx6ull_kodo_emmc_defconfig配置文件(.config)在/configs目录下,复制mx6ull_14x14_evk_emmc_defconfig文件,重命名为mx6ull_kodo_emm......
  • 组合数学课程笔记(一):框架构建
    组合数学的严格定义是非常困难的,其设计的内容广泛,分类困难,体系性较弱。不过,我们可以把组合数学按照问题、工具、对象三种方法进行分类,例如图论,就是按照研究对象分出的内容......
  • JAVA 学习笔记(五)
      子类通过方法的重写机制可以隐藏继承父类的方法,把父类的状态和行为改变为子类自己的状态和行为.假如父类中有一个方法myMethod(),一旦子类重写了超类的方法myMethod......
  • 多项式相关算法学习笔记(持续更新)
    第一次用博客园写学习笔记,写的不好请见谅~欢迎各位OIer在评论区说一下自己对这篇博客的建议!有关多项式的基本概念对于求和式\(\suma_nx^n\),如果是有限项相加,称为多项......
  • 003 - 投资组合最优化
    投资组合优化工具主要是基于资产管理行业的经典理论——现代投资组合理论(modernportfoliotheory,MPT)的基本原理。现代投资组合理论MPT的核心原理是,投资者一贯是风险厌恶......
  • dp学习笔记
    目录斜率优化dpH.仓库建设思路代码J.土地购买思路:代码斜率优化dpH.仓库建设思路很容易想暴力,因为只能往后送物资,从后往前计算dp[i]为在i这里建造仓库且i~n都有地可去......
  • 《分布式技术原理与算法解析》学习笔记Day14
    分布式计算模式:Stream什么是流数据?实时性任务主要是针对流数据处理,对处理时延要求很高,通常需要常驻服务进程,等待数据的随时到来随时处理,以保证低时延。流数据有4个特征:......
  • 读Java实战(第二版)笔记12_重构、测试和调试
    1. 设计模式1.1. 对设计经验的归纳总结1.2. 一种可重用的蓝图1.3. Java5引入了for-each循环1.3.1. 替代了很多显式使用迭代器的情形1.4. Java7推出的菱形操......
  • 谷粒学院day03笔记
    前端开发一、工具vscode层级:文件夹->工作区->文件/文件夹插件:二、ECMAScript6简介1.ECMAScript和JavaScript的关系2.ES6与ECMAScript2015的关系3.......