首页 > 其他分享 >「学习笔记」组合数学

「学习笔记」组合数学

时间:2023-06-16 18:11:52浏览次数:41  
标签:le dbinom 组合 元素 笔记 cdots 数学 mathrm

本文部分内容来自 \(\texttt{OI-Wiki}\)。


加法 & 乘法原理

加法原理
完成一个工程可以有 \(n\) 类办法,\(a_i(1 \le i \le n)\) 代表第 \(i\) 类方法的数目。那么完成这件事共有 \(S=a_1+a_2+\cdots +a_n\) 种不同的方法。
乘法原理
完成一个工程需要分 \(n\) 个步骤,\(a_i(1 \le i \le n)\) 代表第 \(i\) 个步骤的不同方法数目。那么完成这件事共有 \(S = a_1 \times a_2 \times \cdots \times a_n\) 种不同的方法。

排列与组合

排列

从 \(n\) 个不同元素中,任取 \(m\)(\(m\leq n\),\(m\) 与 \(n\) 均为自然数,下同)个元素按照一定的顺序排成一列,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个排列;从 \(n\) 个不同元素中取出 \(m(m\leq n)\) 个元素的所有排列的个数,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的排列数,用符号 \(\mathrm A_n^m\)(或者是 \(\mathrm P_n^m\))表示。

\[\mathrm A_n^m = n \cdot (n - 1) \cdot (n - 2) \cdots (n - m + 1) = \dfrac{n!}{(n - m)!} \]

公式可以这样理解:\(n\) 个人选 \(m\) 个来排队 \((m \le n)\)。第一个位置可以选 \(n\) 个,第二位置可以选 \(n-1\) 个,以此类推,第 \(m\) 个(最后一个)可以选 \(n-m+1\) 个,得:

\[\mathrm A_n^m = n(n-1)(n-2) \cdots (n-m+1) = \frac{n!}{(n - m)!} \]

全排列:\(n\) 个人全部来排队,队长为 \(n\)。第一个位置可以选 \(n\) 个,第二位置可以选 \(n-1\) 个,以此类推得:

\[\mathrm A_n^n = n(n-1)(n-2) \cdots 3 \times 2 \times 1 = n! \]

全排列是排列数的一个特殊情况。

组合

从 \(n\) 个不同元素中,任取 \(m \leq n\) 个元素组成一个集合(不是排列),叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个组合;从 \(n\) 个不同元素中取出 \(m \leq n\) 个元素的所有组合的个数,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的组合数,用符号 \(\dbinom{n}{m}\) 来表示,读作「\(n\) 选 \(m\)」。

组合数计算公式

\[\dbinom{n}{m} = \frac{\mathrm A_n^m}{m!} = \frac{n!}{m!(n - m)!} \]

如何理解上述公式?我们考虑 \(n\) 个人选 \(m\) 个出来(\(m \le n\)),不排队,不在乎顺序。如果在乎顺序那么就是
\(\mathrm A_n^m\),如果不在乎那么就要除掉重复,那么重复了多少?同样选出来的 \(m\) 个人,他们还要「全排」得 \(m!\)。
组合数也常用 \(\mathrm C_n^m\) 表示,即 \(\mathrm C_n^m=\dbinom{n}{m}\)。现在数学界普遍采用 \(\dbinom{n}{m}\) 的记号而非 \(\mathrm C_n^m\)。

特别地,规定当 \(m>n\) 时,\(\mathrm A_n^m=\dbinom{n}{m}=0\)。

关于组合数的一些公式

\[\dbinom{n}{0} = \dbinom{n}{n} = 1\\ \]

这个应该很好理解,不选和全选的方式就只有一种情况。


\[\dbinom{n}{m} = \dbinom{n}{n - m}\\ \]

这个公式可以这么理解,你在 \(n\) 个人中选走了 \(m\) 个人,另一个人把剩下的 \(n - m\) 个人给选走了,对你来说,你选人的方案数为 \(\dbinom{n}{m}\),而另一个人选人的方案数与我们是一样的,换位思考一下,倘若主动权在另一个人手中,则他选人的方案数就是 \(\dbinom{n}{n - m}\),方案数不变,两者是等价的,故得 \(\dbinom{n}{m} = \dbinom{n}{n - m}\)。


\[\dbinom{n}{m} = \dbinom{n - 1}{m - 1} + \dbinom{n - 1}{m} \]

这个公式可以这么理解,对于从 \(n\) 个人中选 \(m\) 个人的方案数,可以分第一个人选或不选两种方案,如果第一个人选,则方案数为 \(\dbinom{n - 1}{m - 1}\),如果第一个人不选,则方案数为 \(\dbinom{n - 1}{m}\),加起来即为 \(\dbinom{n}{m}\)。
由此,我们可以得到组合数的递推公式,下面是递推求组合数的代码。

for (int i = 0; i <= n; ++ i) {
    C[i][0] = 1;
    for (int j = 1; j <= i; ++ j) {
        C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
    }
}

二项式定理

之前写了:「学习笔记」从二项式定理到多项式定理

抽屉原理(鸽巢原理)

现在有 \(n + 1\) 个东西,放到 \(n\) 个抽屉里面去,那么肯定有一个抽屉放了 \(2\) 个东西。
不信你自己试试看。
让我们扩展一下:现在要把 \(kn + 1\) 个东西放到 \(n\) 个抽屉中去,则至少有 \(1\) 个抽屉至少有 \(k + 1\) 个东西。
定理很简单,这类题目真正难的地方在于你要能看出它是抽屉原理,要知道谁是抽屉,谁是东西。

容斥原理

之前写了:「学习笔记」容斥原理

组合数的题目

有 \(n\) 个数,\(1, 2, 3, 4, 5, 6, \cdots\),选 \(m\) 个数,不计顺序,一个数可以选多次,求方案数。

假设选出的数是 \(a_1, a_2, a_3, \cdots, a_m\),这 \(m\) 个数不能重复,且递增选出。方案数:\(\dbinom{n}{m}\)
这是我们所知道的,\(a \le a_1 < a_2 < a_3 < \cdots < a_m \le n\\\)。
但是,对于这个题来说,情况是 \(1 \le b_1 \le b_2 \le b_3 \le \cdots \le b_m \le n\),因此我们需要转化过去,即

\[a \le a_1 < a_2 < a_3 < \cdots < a_m \le n\\ \Uparrow\\ 1 \le b_1 \le b_2 \le b_3 \le \cdots \le b_m \le n\\ \]

考虑构造,\(C_1 = b_1, C_2 = b_2 + 1, C_3 = b_3 + 2, \cdots , C_m = b_m + m - 1\)
那么,\(1 \le b_1 \le b_2 \le b_3 \le \cdots \le b_m \le n\) 就转化为了 \(1 \le C_1 < C_2 < C_3 \cdots < C_m \le n + m - 1\)
我们的方案数也呼之欲出了:\(\dbinom{n + m - 1}{m}\)。

标签:le,dbinom,组合,元素,笔记,cdots,数学,mathrm
From: https://www.cnblogs.com/yifan0305/p/17485986.html

相关文章

  • attention学习-课程笔记
    attention层计算过程:相似度函数fatt计算输入X和查询向量q之间的相似度e;相似度e经过softmax计算得到权重a。 向量e和a的长度与输入X的第一个维度相同。权重a与输入X相乘,得到输出y。相似度计算可使用点积dotprodecut,由于输入X的维度通常较高,q.X值会很大,因此使用sqrt(Dq)进......
  • 【阅读笔记】Anchored Neighborhood Regression for Fast Example-Based uper Resolut
    论文信息[AnchoredNeighborhoodRegressionforFastExample-BaseduperResolution]-TIMOFTER,2013,IEEEInternationalConferenceonComputerVision前置内容邻域嵌入(NeighborEmbedding,NE)是“样本-样本”映射,在训练样本中寻找测试样本的相似邻居特征样本,计算量略大。......
  • 打工笔记--------------------------弄了一个还不错的NPOI的helper类
    `usingNPOI.HSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.SS.Util;usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Text;namespaceUtils.Public{publicpartialclassNPOIHelper{/......
  • Linux终端快捷键笔记
    Linux快捷键: Tab  补全机制,可以补全文件名以及命令 ctrl+c 强制中断当前命令程序 ctrl+x 暂停终端当前运行的程序,fg命令可以恢复暂停的程序 ctrl+a 光标迅速回到行首 ctrl+e 光标迅速回到行尾 ctrl+u 剪切(删除)当前光标前的......
  • mybatis 笔记
    查询结果被合并mapper中定义的sql查询结果有3条,但执行mapper接口方法返回的实体列表只有1条,数据数量不符。这有可能是由于xml中的定义的resultMap有缺陷,如没有明确的定义一个用作主键的列,这分两种情况分别说明。//reusltMap定义<resultMapid="vo"type="ProjectCen......
  • Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
    前言  前面做了一些交互,网页是直接通过html对response进行返回的,这里QtWebApp与传统的web服务器不同,传统的web服务器可以调用同级目录相对路径或者绝对路径下的js,而QtWebApp的httpserver是response返回当前页面的问题,默认是无法调用的。  为了解决调用一些依赖的如echarts......
  • 整体二分学习笔记
    概念对于一个很多询问的题,假如对于一个询问可以二分处理,同时一次check可以只用\(n\)的时间处理所有询问的check结果,我们可以使用整体二分来做这个题。思想设函数\(\operatorname{solve}(S,L,R)\)为现在正在处理询问序列\(S\)里的询问,答案值域为\([L,R]\)。向下......
  • 【笔记】learning git branching
    git图是由子节点指向父节点(可能有多个父节点)gitcommitgitbranchgitmergegitrebase......
  • 系统架构设计师笔记第16期:数据库基本概念
    数据库技术的发展数据库技术在过去几十年中经历了显著的发展和演变。层次数据库和网状数据库:20世纪60年代和70年代初,层次数据库和网状数据库是主流的数据库模型。层次数据库使用树状结构组织数据,而网状数据库使用复杂的网络结构。这些数据库模型适用于特定的数据组织和查询需求,但缺......
  • Python 初学笔记
    1.注释:与c和cpp不一样,python的注释不是//或者/**/,而是#.....  //单行注释多行注释"""......."""                         //多行注释type()     //查看数据的类型,在括号里面填入查看数据的信息数据类型转......