首页 > 其他分享 >【1】组合数学基础

【1】组合数学基础

时间:2024-08-24 17:48:21浏览次数:9  
标签:dbinom limits bmod 组合 基础 数学 Theta sum

【1】组合数学基础

我们用 \(\dbinom{n}{m}\) 代表组合数,其含义为从 \(n\) 个物体中选出 \(m\) 个的方案数,也可以记为 \(C_{n}^m\)。

\(n\) 的阶乘为 \(\prod\limits_{i=1}^ni\),记为 \(n!\)。

\(n\) 的 \(m\) 次下降幂为 \(\prod\limits_{i=0}^{m-1}(n-i)=\frac{n!}{(n-m)!}\),记为 \(n^{\underline{m}}\)。

1.1 基本恒等式

从 \(n\) 个物品中选出 \(m\) 个,第 \(i\) 次有 \(n-i+1\) 种选法,因此总共有 \(n^{\underline{m}}\) 中选法,但是因为取出的顺序被多算了,所以要除掉 \(m!\),因此我们可以得到组合数的 **定义式 **:

\[\dbinom{n}{m}=\dfrac{n^{\underline{m}}}{m!}=\dfrac{n!}{m!(n-m)!} \]

预处理阶乘和阶乘的逆元即可做到 \(\Theta(n)-\Theta(1)\),不过因为需要逆元存在因此通常要求模数是大质数。

这一公式也说明了二项式系数的对称性,即 \(\dbinom{n}{m}=\dbinom{n}{n-m}\)。

同时当 \(n\) 很大,\(m\) 不大时,我们可以 \(\Theta(m)\) 求出 \(\dbinom{n}{m}\)。

从另一种角度考虑,我们分第 \(n\) 个物品选或者不选,可以得到 加法公式

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

通过这个式子我们可以做到 \(\Theta(n^2)-\Theta(1)\),不对模数有要求。

我们来看加法公式的一些重要应用:

上指标求和

\[\sum\limits_{i=0}^n\dbinom{i}{m}=\dbinom{n+1}{m+1} \]

证明:

\(\binom{n+1}{m+1}=\binom{n}{m}+\binom{n}{m+1}=\binom{n}{m}+\binom{n-1}{m}+\binom{n-1}{m+1}=……\)

不断对最后一项展开即可。

平行求和

\[\sum\limits_{i=0}^n\dbinom{m+i}{i}=\dbinom{n+m+1}{n} \]

只需要利用对称性,然后通过上指标求和即可。

给出 \(l_1,r_1,l_2,r_2\),请求出下式的值:

\[\sum\limits_{i=l_1}^{r_1}\sum\limits_{j=l_2}^{r_2}\dbinom{i+j}{i} \]

应用两次上指标求和即可。

另一个重要的式子是 吸收恒等式

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

证明很简单,按照阶乘的定义拆开即可。

移项可以得到一个更加常用的形式:

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

我们来看这种公式有什么应用:

求下式的值:

\[\sum\limits_{i=0}^ni\dbinom{m-i-1}{m-n-1} \]

我们用 \(m-(m-i)\) 替换 \(i\),然后得到:

\[\sum\limits_{i=0}^n(m-(m-i))\dbinom{m-i-1}{m-n-1}=\sum\limits_{i=0}^nm\dbinom{m-i-1}{m-n-1}-\sum\limits_{i=0}^n(m-i)\dbinom{m-i-1}{m-n-1} \]

然后对于后式使用吸收恒等式,变成

\[\sum\limits_{i=0}^nm\dbinom{m-i-1}{m-n-1}-\sum\limits_{i=0}^n(m-n)\dbinom{m-i}{m-n}=m\sum\limits_{i=0}^n\dbinom{m-i-1}{m-n-1}-(m-n)\sum\limits_{i=0}^n\dbinom{m-i}{m-n} \]

此时变成上指标求和的形式,化简完可以得到:

\(\dfrac{n}{m-n+1}\dbinom{m}{m-n}\)

多重集组合数

\[\dbinom{n}{x_1}\dbinom{n-x_1}{x_2}\cdots \dbinom{n-x_1-x_2……-x_{k-1}}{x_k}=\dfrac{n!}{x_1!x_2!\cdots x_k!} \]

最后我们来看两个最为重要的恒等式:

二项式定理

\[(a+b)^n=\sum\limits_{i=0}^n\dbinom{n}{i}a^ib^{n-i} \]

证明只需要考虑从每个单项式里选择 \(a\) 或者 \(b\) 就行。

带入一些 \(a,b\) 的特例可以得到如下三个式子:

\[0^n=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^i \]

组合数行内交错和。

\[2^n=\sum\limits_{i=0}^n\dbinom{n}{i} \]

子集个数。

\[3^n=\sum\limits_{i=0}^n\dbinom{n}{i}2^i \]

子集枚举的复杂度。

范德蒙德恒等式

\[\sum\limits_{i=0}^n\dbinom{n}{i}\dbinom{m}{k-i}=\dbinom{n+m}{k} \]

这里的证明则需要考虑另一种常见的方式,组合意义。

这些就是就是常见的组合恒等式。

例一

\(q\) 次询问,每次给出 \(n,l,r\),求出下式的值:

\[\sum\limits_{i=l}^r\dbinom{n}{i} \]

\(1\leq n,l,r,q\leq 10^5\)。

1.2 常见的组合意义

  • 把 \(n\) 个相同的小球分到 \(m\) 个不同的盒子里,且所有盒子非空。

插板法的经典应用,可以理解成在 \(n-1\) 个空隙中插入 \(m-1\) 个隔板,所以方案数为 \(\binom{n-1}{m-1}\)。

  • 把 \(n\) 个相同的小球分到 \(m\) 个不同的盒子里,且盒子可以为空。

等价于右面方程的非负整数解的数量 \(x_1+x_2+\cdots+x_m=n\)。

令 \(y_i=x_i+1\),那么 \(y_1+y_2+\cdots y_m=n+m\),因为 \(x,y\) 一一对应,所以 \(x\) 的数量就是 \(y\) 的数量,而后者显然等于 \(\dbinom{n+m-1}{m-1}\)。

例三 [ABC240G] Teleporting Takahashi

例四 CF1548C The Three Little Pigs

例五 P4370 [Code+#4] 组合数问题2

练习一 P8367 [LNOI2022] 盒

1.3 Lucas 定理

对于质数 \(p\),有:

\[\dbinom{n}{m}\equiv \dbinom{n/p}{m/p}\dbinom{n\bmod p}{m\bmod p}\pmod p \]

预处理 \(n,m<p\) 时的阶乘和逆元,可以在 \(\Theta(p)-\Theta(\log_2(n))\) 内求组合数。

例五 [SHOI2015] 超能粒子炮·改

设 \(F(n,k)=\sum\limits_{i=0}^k\dbinom{n}{i}\)

\(F(n,k)=\sum\limits_{i=0}^k\dbinom{n\bmod p}{i\bmod p}\dbinom{n/p}{i/p}\)

​ \(=\sum\limits_{i=0}^{p-1}\dbinom{n\bmod p}{i}\sum\limits_{j=0}^{k/p-1}\dbinom{n/p}{j}+\sum\limits_{i=0}^{k\bmod p}\dbinom{n\bmod p}{i}\dbinom{n/p}{k/p}\)

​ \(=F(n\bmod p,p-1)F(n/p,k/p-1)+F(n\bmod p,k\bmod p)\dbinom{n/p}{k/p}\)

\(\Theta(p^2)\) 预处理,组合数直接 Lucas 求,复杂度 \(\Theta(p^2+T\log_p^2n)\)。

这个形式更加通俗的解释是:把 \(n,m\) 写成 \(p\) 进制,那么组合数就是每一位的组合数的乘积。

而这个解释通常可以把 Lucas 定理和 数位DP 联系在一起。

例六 [清华集训2016] 组合数问题

因为答案等于每一位下 \(\dbinom{i_k}{j_k}\) 的乘积,所以只要存在有一位 \(k\),满足 \(i_k<j_k\),那么 \(\dbinom{i}{j}\equiv 0\pmod p\)。

考虑数位 DP,设 \(f_{k,0/1,0/1,0/1,0/1}\) 表示当前到第 \(k\) 位,是否出现 \(i_k<j_k\) 的位,\(i_k,j_k\) 是否卡上界,\(i\) 是否等于 \(j\)。

而当 \(p=2\) 时,我们可以得到一个常用推论:

  • 对于 \(n,m,[n\& m=m]\equiv \dbinom{n}{m}\pmod p\)。

例七 [CTSC2017] 吉夫特

题给条件显然等于 \(a_{b_{i+1}}\) 是 \(a_{b_i}\) 的子集,设 \(f_{i}\) 表示结尾的 \(a=i\) 的方案数,每次枚举子集转移即可。

例八 CF1770F Koxia and Sequence

练习二 [AGC043B] 123 Triangle

练习三 P7976 「Stoi2033」园游会

1.4 Kummer 定理

对于 \(n,m,p\),$$\dbinom{n+m}{n}$$ 中 \(p\) 的个数等于 \(n+m\) 在 \(p\) 进制下的进位次数。

这个定理同样和数位DP关系密切。

例九 CF582D Number of Binominal Coefficients

根据 Kummer 定理,我们只需要保证进位次数 \(\geq \alpha\) 即可。

数位DP,设 \(f_{i,j,0/1,0/1,0/1}\) 表示当前第 \(i\) 位,总进位次数为 \(j\) ,是否卡上界,以及是否向当前位进位。

复杂度 \(\Theta(\log_p^2A)\)。

标签:dbinom,limits,bmod,组合,基础,数学,Theta,sum
From: https://www.cnblogs.com/jesoyizexry/p/18378000

相关文章

  • 057、Vue3+TypeScript基础,页面通讯之父页面使用$refs修改子页面暴露的成员
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • python零基础教学(二)
    元组&列表&字典元组Python的元组与列表类似,不同之处在于元组的元素不能修改,但是元组使用小括号,列表使用方括号,如果你想创建元组,只需要在括号中添加元素,并使用逗号隔开即可元组=(1,2,'哈哈哈')#这就是一个元组,你可以往里面装str,float,int等等列表在元组的基......
  • 信息学奥赛初赛天天练-74-NOIP2016普及组-基础题5-树、父节点、根节点、叶子节点、非
    NOIP2016普及组基础题521从一个4×4的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有()种方法。22约定二叉树的根节点高度为1。一棵结点数为2016的二叉树最少有()个叶子结点;一棵结点数为2016的二叉树最小的高度值是()2相......
  • 056、Vue3+TypeScript基础,页面通讯之$attrs父类子类孙类互传数据和事件
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 数学建模之Matlab快速入门--全
    前言:本文是之前学Matlab时候做的笔记,很适合快速入门数学建模中matlab和python是最常用的两个软件,现在本人更喜欢python去做数学建模文章目录界面介绍与操作快捷操作数据类型数值型整型浮点型复型逻辑型字符型struct数组cell数组函数句柄日期和时间型数据标准变量储存......
  • 053、Vue3+TypeScript基础,页面通讯之$attrs的使用
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • YSP_refs_cn_2017_适应症外及基础研究
    rhTNFR-Fc中文文献-2017-适应症外和基础研究 探索适应症外 案例报道[1-10][1] 杨丽颖,马俊兵.重组人Ⅱ型肿瘤坏死因子受体-抗体融合蛋白治疗红皮病性银屑病的疗效观察.中国医疗美容,2017,7:33-35.浏览文摘[2] 李赛燕.益赛普治疗白塞病的临床分析.现代养生(下半月......
  • 零基础国产GD32单片机编程入门(一)GD32单片机GPIO输出Keil5工程创建含源码
    文章目录一.概要二.GD32单片机GPIO内部结构图三.GD32单片机GPIO输入输出信号流向四.GD32单片机GPIO引脚的复用以及重映射五.从零开始创建一个GD32F103C8T6单片机GPIO输出驱动LED灯例程六.工程源代码下载七.小结一.概要GPIO(generalporposeintputoutput):单片机通......
  • 052、Vue3+TypeScript基础,页面通讯之一个组件中多个v-model数据绑定
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 深度学习基础
    深度学习基础一、临界点及其种类1.鞍点2.局部极小值3.局部极大值临界点特点:当参数对损失微分为零的时候,梯度下降不会再更新参数,训练停止,损失不再下降。二、判断临界值种类的方法判断一个临界点是什么种类需要知道损失函数的形状损失函数\(L(\theta)\)可以近似为\[L(\thet......