目录

排列组合

\[{n \choose m} = \frac{n!}{(n-m)!m!}
\]
\[A_n^m=\frac{n!}{(n-m)!}
\]
\[C_n^m=\frac{A_n^m}{A_m^m}=\frac{n!}{(n-m)!m!}
\]

恒等式

(1) \(C_n^m=C_n^{n-m}\)

从\(n\)个元素选择\(m\)个,等价于\(n\)个元素中不选\(n-m\)个。

(2) \(A_n^m+mA_n^{m-1}=A_{n+1}^m\)

在\(n+1\)个元素中选择\(m\)个元素排成一排,等价于考虑第\(n+1\)个元素:

  1. 不在该排列中:\(A_n^m\)
  2. 存在该排列中:\(mA_n^{m-1}\),\(m\)表示该元素有\(m\)种放置位置。

(3) \(C_n^{m-1}+C_n^{m}=C_{n+1}^m \ or \ C_{n-1}^{m-1}+C_{n-1}^m=C_n^m\)

在\(n+1\)个元素中选出\(m\)个元素,等价于考虑第\(n+1\)个元素:

  1. 不在该组合中:\(C_n^m\)
  2. 存在该组合中:\(C_n^{m-1}\)

(3*) \(\sum_{i=m}^nC_i^m=C_m^m+C_{m+1}^m+C_{m+2}^m+\cdots+C_{n-1}^m+C_n^m=C_{n+1}^{m+1}\)

可由式\((3)\)推导而出。

\(C_{m+1}^{m+1}=1=C_{m}^{m}\)

\(C_{m}^{m}+C_{m+1}^{m}=C_{m+1}^{m+1}+C_{m+1}^m=C_{m+2}^{m+1}\)

\(C_{m+2}^{m+1}+C_{m+2}^m=C_{m+3}^{m+1}\)

\(\cdots\)

\(C_{n}^{m+1}+C_n^m=C_{n+1}^{m+1}\)

得证。

事实上式\((3)\)可以认为是在杨辉三角上的递推。所以该式也可以由杨辉三角进行理解(如图)。

事实上很多恒等式都可以直接利用杨辉三角进行(眼睛上的)理解推导()

(4) \(C_n^{m-1}+2C_n^m+C_n^{m+1}=C_{n+2}^{m+1}\)

从\(n+2\)个元素中选出\(m+1\)个元素,考虑第\(n+1\)个元素和第\(n+2\)个元素:

  1. 两元素都不在该组合中:\(C_n^{m+1}\)
  2. 两元素都在该组合中:\(C_n^{m-1}\)
  3. 两元素有一个在该组合中:\(2C_n^m\)

(5) \(C_a^b \times C_b^c=C_a^c \times C_{a-c}^{b-c}=C_a^c \times C_{a-c}^{a-b}\)

考虑在集合\(A'\),\(|A'|=a\)中,求构造集合\(C' \subseteq B' \subseteq A'\),\(|C'|=c,|B'|=b\)的方案数。

  1. 先从\(A'\)中\(a\)个元素中取出\(b\)个元素放入\(B'\),再从\(B'\)中取出\(c\)个元素放入\(C'\):\(C_a^b \times C_b^c\)
  2. 先从\(A'\)中\(a\)个元素中取出\(c\)个元素放入\(C'\)(当然同时也放进了\(B '\)),再从剩下的\(a-c\)个元素中取出\(b-c\)个元素放入\(\complement_{B'}C'\)中:\(C_a^c \times C_{a-c}^{b-c}\)

(6) \(\sum_{i=0}^{a}C_n^iC_m^{a-i}=C_n^0C_m^a+C_n^1C_m^{a-1}+\cdots+C_n^{a-1}C_m^1+C_n^aC_m^0=C_{n+m}^a\)

在\(n+m\)个元素中选出\(a\)个元素:

  • 前\(n\)个元素中选择了\(i\)个元素,后\(m\)个元素中选择了\(a-i\)个元素:\(C_n^iC_m^{a-i}\)

特别地,当\(m=n\)时:

\(\sum_{i=0}^aC_n^iC_n^{a-i}=C_{2n}^a\)

又根据\(C_n^i=C_n^{n-i}\),当\(a=n\)时:

\(\sum_{i=0}^n(C_n^i)^2=C_{2n}^n\)

多重集合(全)排列数

设可重集\(S=\{n_1 \cdot a_1,\cdots,n_k \cdot a_k \}\)

\(S\)的全排列数为:

$$\frac{n!}{n_1! \cdots n_k!}$$

将\(m\)个相同物品放入\(n\)个相同盒子 || 将正整数\(m\)划分成\(n\)个正整数的和

1.当作容量为\(n\),物品大小为\(1 \dots m\)的完全背包。

2.设\(f_{i,j}\)表示将正整数\(i\)划分为\(j\)个正整数之和的方案数:\(f_{i,j}=f_{i-1,j-1}+f_{i,j-i}\)

Catalan数

一些等价的Catalan数相关问题例:

  1. 入栈序列为\(1 \dots n\)的出栈序列种数;
  2. (基本模型)将\(n\)个\(0\)和\(n\)个\(1\)排成任意前缀\(0\)的个数不少于\(1\)的个数的序列数量;
  3. \(n\)个左括号和\(n\)个右括号组成的合法括号序列个数;
  4. \(n\)个节点构成的不同二叉树数量;
  5. 平面直角坐标系中从原点\((0,0)\)出发到\((2n,0)\),每一步可以向正右上或正右下移动,并且路径不经过第四象限的方案数
  6. \(\dots\)

使用例\((3)\)来说明,对\(n\)个节点构成二叉树数量的一种\((0)\)的理解:入栈后继续入栈为左儿子,直接出栈为没有左儿子;出栈后入栈为右儿子,直接出栈为没有右儿子。

其实这个问题的原本理解是:已知先序遍历,求构造中序遍历的方案数。

当然也可以理解为一个递推:设\(Cat_i\)表示\(i\)个节点构成二叉树的数量,那么有\(Cat_i=\sum_{j=0}^i Cat_j \times Cat_{i-j}\)

现在用例\((4)\)来说明:

平面直角坐标系中从原点\((0,0)\)出发到\((2n,0)\),每一步可以向正右上或正右下移动,并且路径不经过第四象限的方案数

也即有\(n\)个向右上的操作,\(n\)个向右下的操作。

可以考虑用所有的方案(\(C_{2n}^n\))减去不合法的(经过第四象限的方案)

每个不合法的方案必定经过直线\(y=-1\)。将这样每个方案第一个与该直线相交的点之后的整段路径,会得到唯一对应的一条终点为\((2n,-2)\)的路径。

也就是从\((0,0)\)到\((2n,-2)\)的每一条路径都对应了一条原问题不合法的路径。

所以答案即\(Cat_n=C_{2n}^n-C_{2n}^{n-1}\)

zzx:另外还有\(Cat_n=\frac{C^{n}_{2n}}{n+1}\)

【Note】(坑)一些组合恒等式的实际意义理解(和待填坑的组合数学知识)的更多相关文章

  1. F2eTest和uirecorder自动化测试环境部署填坑记录

    坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示. 填坑:需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重 ...

  2. Mybatis-Plus的填坑之路 - Lynwood/wunian7yulian

    目录 Mybatis-Plus 我来填坑~ 目录 一.简单介绍 官方说明 : 成绩: 最新版本: 开发层面MyBatis-Plus特色 Mybatis-Plus中的Plus 二.MP的特性 三.MP框 ...

  3. hdu1799-循环多少次?-(组合恒等式)

    循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. python练习笔记——组合恒等式

    排列组合结合恒等式 已知从n个物品中取出m个,则存在一个组合恒等式. C(n, m)=C(n, n-m)=C(n-1, m-1)+C(n-1,m) 其中C(n,0) = 1 求:从5取3 和 10 取 ...

  5. 【填坑纪事】一次用System.nanoTime()填坑System.currentTimeMills()的实例记录

    JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在 ...

  6. 写个续集,填坑来了!关于“Thread.sleep(0)这一行‘看似无用’的代码”里面留下的坑。

    "我报名参加金石计划1期挑战--瓜分10万奖池,这是我的第2篇文章,点击查看活动详情" 你好呀,我是居家十三天只出了一次小区门的歪歪. 这篇文章是来填坑的,我以前写文章的时候也会去 ...

  7. GC overhead limit exceeded填坑心得

    我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性 ...

  8. 前端系列——jquery前端国际化解决方案“填坑日记”

    前言:最近,新的平台还没有开发完成,原来的老项目又提出了新的需求:系统国际化.如果是前后端完全分离的开发模式,要做国际化,真的太简单了,有现成的解决方案,基于Node构建的时下热门的任何一种技术选型都 ...

  9. webapp填坑记录[更新中]

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  10. 拾遗与填坑《深度探索C++对象模型》3.2节

    <深度探索C++对象模型>是一本好书,该书作者也是<C++ Primer>的作者,一位绝对的C++大师.诚然该书中也有多多少少的错误一直为人所诟病,但这仍然不妨碍称其为一本好书 ...

随机推荐

  1. 如何在微信小程序中使用ECharts图表

    在微信小程序中使用ECharts 1. 下载插件 首先,下载 GitHub 上的 ecomfe/echarts-for-weixin 项目. 下载链接:ecomfe/echarts-for-weixi ...

  2. 关于pandas的一些用法

    pandas用法之前我总是把他想的无比复杂.其实也是比较简单的,这个东西在做数据统计的时候还是挺好用的. 然后这里列举几个比较好用的几段代码.偏向数据透视类型pivot的,导出方式是直接在IDE 生成 ...

  3. Springboot中使用枚举

    枚举映射数据库字段 配置枚举包扫描路径 mybatis-plus: # 扫描通用枚举 type-enums-package: com.xx.**.enums 方法一:@EnumValue 和 @Jso ...

  4. 学习使用数据库SQLServer (一)

    小记一下学习使用数据库时遇到的问题 1.建表时未设置主键约束名,此时删表主键会遇到困难,不能简单使用 ALTER TABLE NAME DROP CONSTRAINT 约束名: 而是要先找到数据表中主 ...

  5. 基础篇:windows常用命令

    1. windows常用系统命令 cd [进入目录] dir [列出当前目录文件] echo + 打印内容 [打印命令] echo 123 > 1.txt [打印内容到文本] type + 文件 ...

  6. numpy基本使用(一)

    一.简介  NumPy(Numerical Python) 是用于科学计算及数据处理的Python扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 二.数据结构  n ...

  7. input类型为number仍可以输入e,+,-解决方法

    <input type="number" onKeypress="return(/[\d\.]/.test(String.fromCharCode(event.ke ...

  8. NOIP2014普及组

    T2]比例简化 其实比较简单,主要是比较的方法以前没看过吧 要学会知识迁移啊! #include<iostream> #include<cstring> #include< ...

  9. 洛谷P1118数字三角形,

    #include <bits/stdc++.h> using namespace std; int c[13][13];//杨辉三角 int b[13];//用于排除 int a[13]; ...

  10. QT数据结构内存分配策略

    在QT的Reference中无意看到了QString及其他类型数据结构内存的分配策略,翻译并记录一下. 在QString的数据结构中,QString通过一次附加一个字符来动态构建字符串.假设我们向QS ...