组合数学_排列与组合
加法原理
完成一件事情,有N类方式去实现,第一类方式有 a 1 a_1 a1种,第二类方法有 a 2 a_2 a2种,…,第N类方法有 a n a_n an种,则完成这件事情的总方法数为:
∑ i = 1 N a i \sum_{i=1}^N a_i i=1∑Nai
例如:从北京到上海有火车、飞机、轮船 3 种方式,火车、飞机、轮船分别有 a1,a2,a3 个班次,那么从北京到上海有 a1+a2+a3 种方式可以到达。
乘法原理
做一件事,完成它要分成 n 个步骤,第一步有 a 1 a_1 a1 种不同的方法,第二步有 a 2 a_2 a2 种不同的方法,…,第 n 步有 a n a_n an 种不同的方法,那么完成这件事共有 a 1 × a 2 × a 3 × … × a n a_1 ×a_2×a_3×…×a_n a1×a2×a3×…×an 种不同的方法
例如:从北京乘坐火车到上海,需要转 3 次车,每次专车分别有 a1,a2,a3 个班次,那么从北京到上海有 a1×a2×a3 种方式可以到达。
排列组合
在排列与组合问题中,经常会出现计数问题,解决计数问题的思路一般有以下三种:
1)只取需要的。将各种符合条件的情形枚举出来,再利用加法原理求和。
2)先取后排。将各步符合条件的排列或组合计算出来,再根据乘法原理求积。
3)先全部取,再减去不要的。利用容斥定理,将各种符合条件的情形枚举出来,再减去不符合条件的。
排列数
从 n n n个不同元素中取出 m ( m < = n ) m(m<=n) m(m<=n)个元素的所有排列的个数,叫做从 n n n个不同元素中取出 m m m个元素的排列数,⽤符号 A n m A_n^m Anm表示
A n m = n ! ( n − m ) ! A_n^m=\frac{n!}{(n-m)!} Anm=(n−m)!n!
组合数
从 n n n个不同元素中取出 m m m个元素的所有组合的个数,叫做从 n n n个不同元素中取出 m m m个元素的组合数。⽤符号 C n m C_n^m Cnm或 C ( n , m ) C(n,m) C(n,m)来表示
C n m = A n m m ! = n ! m ! ( n − m ) ! C_n^m=\frac{A_n^m}{m!}=\frac{n!}{m!(n-m)!} Cnm=m!Anm=m!(n−m)!n!
组合恒等式
1) C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnn−m
2) C n m = C n − 1 m + C n − 1 m − 1 C_n^m=C_{n-1}^{m}+C_{n-1}^{m-1} Cnm=Cn−1m+Cn−1m−1 ★
3) C n m = n m C n − 1 m − 1 C_n^m=\frac{n}{m}C_{n-1}^{m-1} Cnm=mnCn−1m−1
4) C n m + 1 = n − m m + 1 ∗ C n m C_n^{m+1}=\frac{n-m}{m+1}*C_n^m Cnm+1=m+1n−m∗Cnm
5) ( a + b ) n = ∑ k = 0 n C n k a n − k b k (a+b)^n=\sum_{k=0}^nC_n^ka^{n-k}b^{k} (a+b)n=∑k=0nCnkan−kbk(二项式定理)
特殊展开: 2 n = C n 0 + C n 1 + . . . + C n n − 1 + C n n 2^n=C_n^0+C_n^1+...+C_n^{n-1}+C_n^n 2n=Cn0+Cn1+...+Cnn−1+Cnn
6) C n m C_n^m Cnm 为奇数时有 n&m=n
求组合数的方法
递推求组合数 O ( n m ) O(nm) O(nm)
// c[a][b] 表示从a个苹果中选b个的方案数
for (int i = 0; i < N; i ++ )for (int j = 0; j <= i; j ++ )if (!j) c[i][j] = 1;else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
乘法逆元求组合数 O ( n ) O(n) O(n)
首先预处理出所有阶乘取模的余数fact[N],以及所有阶乘取模的逆元infact[N]
如果取模的数是质数,可以用费马小定理求逆元
int qmi(int a, int k, int p) // 快速幂模板
{int res = 1;while (k){if (k & 1) res = (LL)res * a % p;a = (LL)a * a % p;k >>= 1;}return res;
}// 预处理阶乘的余数和阶乘逆元的余数
fact[0] = infact[0] = 1;
for (int i = 1; i < N; i ++ )
{fact[i] = (LL)fact[i - 1] * i % mod;infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;
}
杨辉三角形打表 O ( n m ) O(nm) O(nm)
1 1 1
11 11 11
121 1 21 121
1331 1 3 3 1 1331
14641 1 4 6 4 1 14641
…
我们不难发现其规律,每个数字等于其左上和上端的值,给定第 i i i行第 j j j列有,
a [ i ] [ j ] = a [ i − 1 ] [ j ] + a [ i − 1 ] [ j − 1 ] a[i][j] =a[i-1][j]+a[i-1][j-1] a[i][j]=a[i−1][j]+a[i−1][j−1]
组合恒等式有: C n m = C n − 1 m + C n − 1 m − 1 C_n^m=C_{n-1}^{m}+C_{n-1}^{m-1} Cnm=Cn−1m+Cn−1m−1 ★
那么,杨辉三角形第 i i i行第 j j j列可表示为: c i j c_ i^ j cij
f[0][0]=1;for(int i = 1; i < N; i++)for(int j = 1; j <= i + 1; j++)f[i][j] = f[i - 1][j] + f[i - 1][j - 1];
排列组合的应用
逐分法
需要分步骤完成的事件,我们首先想到的是乘法原理,对待事件逐一分配。
【例题】现在有12位警察,要分到3个路口每个路口4个人有多少种方案
【解析】第一个路口有 C 12 4 C_{12}^4 C124种选法,因为第一个路口已经用去了4位警察,所以第二个路口就只有 C 8 4 C_8^4 C84种了,第三个也只有 c 4 4 c_4^4 c44种了,根据乘法原理就可以得出总共的方案数就是 C 12 4 × C 8 4 × C 4 4 C_{12}^4×C_8^4×C_4^4 C124×C84×C44
捆绑法
要求元素相邻时,先整体考虑,将相邻元素视作一个大元素进行排序,然后再考虑大元素内部各元素间顺序。
【例题】由数字1、2、3、4、5、6、7组成无重复数字的七位数,求三个偶数必相邻的七位数的个数。
【解析】因为三个偶数2、4、6必须相邻,所以先将2、4、6三个数字“捆绑”在一起有 A 3 3 A_3^3 A33=6种不同的“捆绑”方法;再将捆绑后的元素与1、3、5、7进行全排列,有 A 5 5 A_5^5 A55=120种方法,根据乘法原理共有6×120=720种不同的排法,所以共有720个符合条件的七位数。
插空法
要求元素不相邻时,先将其他元素排好,再将所指定的不相邻的元素插入它们的间隙或两端位置,从而解决问题。
【例题】由数字1、2、3、4、5、6、7组成无重复数字的七位数,求三个偶数互不相邻的七位数的个数。
【解析】因为三个偶数2、4、6互不相邻,所以先将1、3、5、7四个数字排好,有 A 4 4 A_4^4 A44=24种不同的排法,再将2、4、6分别“插入”到第一步排的四个数字的五个“间隙”(包括两端的两个位置)中的三个位置上,有 A 5 3 A_5^3 A53=60种排法,根据乘法原理共有24×60=1440种不同的排法,所以共有1440个符合条件的七位数。
隔板法
把 n n n个相同的苹果分给 k k k个人,要求每个人至少分到一个,求方案数。
把 n n n个苹果排成一排,在其中插入 k − 1 k−1 k−1块隔板,表示 k k k个人分到的部分。
插隔板的方法与分苹果的方案是一一对应的,那么方案数为 C n − 1 k − 1 C_{n−1}^{k−1} Cn−1k−1
那么如果有人可以分到 0 0 0个苹果呢?
我们给每个人多分一个苹果,使得每个人至少分配到一个苹果,在分配完之后再将每个人的苹果拿走一个。
那么方案数为 C k + n − 1 k − 1 C_{k+n−1}^{k-1} Ck+n−1k−1(先给k个苹果,让他们一人一个,再分n个苹果。)
隔板法与不定方程整数解的问题
求不定方程 x 1 + x 2 + x 3 + x 4 + . . . + x k = n x_1+x_2+x_3+x_4+...+x_k=n x1+x2+x3+x4+...+xk=n的解的个数,要求 x i > d i x_i>d_i xi>di
设 y i = x i − d i > 0 y_i=x_i-d_i>0 yi=xi−di>0
那么有 y 1 + y 2 + y 3 + . . . + y k = n − ( d 1 + d 2 + d 3 + . . . + d k ) y_1+y_2+y_3+...+y_k=n-(d_1+d_2+d_3+...+d_k) y1+y2+y3+...+yk=n−(d1+d2+d3+...+dk)
答案: C n − ( d 1 + d 2 + d 3 + . . . + d k ) − 1 k − 1 C_{n-(d_1+d_2+d_3+...+d_k)-1}^{k-1} Cn−(d1+d2+d3+...+dk)−1k−1
(1) O − O − O − O − O − O − O − O − O − O O-O-O-O-O-O-O-O-O-O O−O−O−O−O−O−O−O−O−O 9个空插3个隔板
答案为: C 9 3 C_9^3 C93
(2)非负整数意为 x i x_i xi可以是0,我们可以
( x 1 + 1 ) + ( x 2 + 1 ) + ( x 3 + 1 ) + ( x 4 + 1 ) = 14 (x_1+1)+(x_2+1)+(x_3+1)+(x_4+1)=14 (x1+1)+(x2+1)+(x3+1)+(x4+1)=14
即为: y 1 + y 2 + y 3 + y 4 = 14 y_1+y_2+y_3+y_4=14 y1+y2+y3+y4=14,13个空隙中插3个隔板
答案为: C 13 3 C_{13}^3 C133
(3)根据设 y i = x i − d i > 0 y_i=x_i-d_i>0 yi=xi−di>0
( x 1 + 3 ) + ( x 2 + 2 ) + ( x 3 + 1 ) + ( x 4 − 1 ) = 15 (x_1+3)+(x_2+2)+(x_3+1)+(x_4-1)=15 (x1+3)+(x2+2)+(x3+1)+(x4−1)=15
即为: y 1 + y 2 + y 3 + y 4 = 15 y_1+y_2+y_3+y_4=15 y1+y2+y3+y4=15,14个空隙中插3个隔板
答案为: C 14 3 C_{14}^3 C143
组合数学_排列与组合相关推荐
- 排列公式和组合公式_排列与组合:排列公式与组合公式之间有什么区别?
排列公式和组合公式 Here's the short version. 这是简短的版本. Let's take ringing bells in a church as an example. 让我们 ...
- 【组合数学】排列组合 ( 集合排列、分步处理示例 )
文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...
- 【组合数学】排列组合 ( 多重集组合数示例 | 三个计数模型 | 选取问题 | 多重集组合问题 | 不定方程非负整数解问题 )
文章目录 一.多重集组合示例 二.三个计数模型 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | ...
- 【组合数学】排列组合 ( 多重集组合数 | 所有元素重复度大于组合数 | 多重集组合数 推导 1 分割线推导 | 多重集组合数 推导 2 不定方程非负整数解个数推导 )
文章目录 一.多重集组合 ( 所有元素重复度大于组合数 ) 二.多重集组合 所有元素重复度大于组合数 推导 1 ( 分割线推导 ) 二.多重集组合 所有元素重复度大于组合数 推导 2 ( 不定方程非负 ...
- 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )
文章目录 一.多重集 二.多重集全排列 三.多重集全排列示例 三.多重集非全排列 1 所有元素重复度大于排列数 ( ni≥rn_i \geq rni≥r ) 四.多重集非全排列 2 某些元素重复度小 ...
- 【组合数学】排列组合 ( 排列组合示例 )
文章目录 一.排列组合示例 1 ( 组合 | 乘法法则 | 加法法则 ) 二.排列组合示例 2 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示 ...
- 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )
文章目录 一.排列组合内容概要 二.选取问题 三.集合排列 四.环排列 五.集合组合 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排 ...
- 算法之组合数学及其算法篇(一) ----- 排列与组合
组合数学及其算法篇 前言 排列与组合 无重集的排列与组合 无重集的排列 应用例子 无重集的组合 应用例子 重集的排列和组合 重集的排列 重集的组合 前言 组合数学研究的对象是组态.所谓组态就是指若干个 ...
- 组合数学$1排列组合
C1 排列组合 S0 计数原理 1)加法原理: S = S 1 + S 2 + ⋯ + S k , S i ∩ S j = ∅ ⟹ ∣ S ∣ = ∑ i ∣ S i ∣ \mathbb{S = S_ ...
最新文章
- 通过代码自定义cell(cell的高度不一致)
- Ajax的get、post和ajax提交
- 新手入门深度学习 | 2-2:结构化数据建模流程示例
- 支付产品——收银台设计详解
- 深入理解Spark 2.1 Core (十):Shuffle Map 端的原理与源码分析
- 5款新颖的ReSharper插件
- 专题五:MATLAB数据分析与多项式计算
- MATLAB学习八(二):标准差std
- 新手如何让淘宝店铺的销量提升, 该如何做!
- POI 模板生成word PDF——牛X神器
- 前端如何压缩图片质量
- Labview八段数码管0—9数字显示
- 随机编码生成器MD5加密字符串工具
- python加权最小二乘_如何计算加权最小二乘法的样本权重?
- WIN10-VS2019-SeetaFace6编译
- python全套数据分析课程_B 站疯传,堪称最强,一整套Python数据分析课程,学完月薪30K+!...
- vue 避免全局样式污染的正确做法
- t.l346y.cn.php,Dell EMC PowerEdge T340 离线安装 LNMP 环境
- 2017高考计算机考试大纲,2017高考全国统一考试大纲及考试说明
- 小晶粒zsm分子筛合成表征实验报告_小晶粒ZSM-5分子筛的合成