排列数 A(n, m) 与组合数 C(n, m) 的求法
一、什么是排列,什么是组合?
排列
从 n 个不同元素中,任取 m(m≤n) 个元素,按照一定的顺序排成一列,叫做从 n 个不同元素中取出 m 个元素的一个排列。
组合
从 n 个不同元素中,任取 m(m≤n)个元素并成一组,叫做从 n 个不同元素中取出 m 个元素的一个组合。
通俗地讲
- A (排列):指把几个不但选出来,还要进行排列 如 A42A_4^2A42 是指从 4 个物品中选出 2 个来,而且对它们的顺序是有要求的,顺序不一样,结果则不一样。A42=4×3=12A_4^2 =4×3=12A42=4×3=12
- C (组合):是指从 n 个数中选取几个出来,不排列,只组合。如 C42C_4^2C42 是指从 4 个中选 2 个,不管它们的内部的顺序。C42=C_4^2 =C42= 4×32×1=6\cfrac{4×3}{2×1} = 62×14×3=6.
- 总结:排列与元素的顺序有关,组合与顺序无关。如 231 与 213 是两个排列;2+3+1 的和与 2+1+3 的和是一个组合。
由上可得,排列数和组合数的求法代码如下:
(1) 排列数
m 就是需要减 1 的次数。
int A(int n, int m) {int res = 1;for (int i = m; i >= 1; i--) {res *= n; //n × n-1 × n-2 × ... n-m,m就是需要减1的次数n--;}
}
(2) 组合数
与求排列数一样,求组合数也是对公式的实现,不过组合这里有个小技巧可以对代码进行优化,那就是利用组合的互补率:Cnm=Cnn−mC_n^m = C_n^{ n - m}Cnm=Cnn−m 来减少循环执行次数。
版本一
由上可得 Cnm=C_n^m=Cnm= Anmm!\cfrac{A_n^m}{m!}m!Anm,而 m!m!m! =Amm=A_m^m=Amm,故代码可表达为:
int C(int n, int m) {m = Math.min(m, n-m);int numerator = A(n, m); //分子int denominator = A(m, m); //分母return numerator / denominator;
}
版本二
根据 Cnm=C_n^m=Cnm= Anmm!\cfrac{A_n^m}{m!}m!Anm,但我们注意到,AnmA_n^mAnm 的代码实现中,m 一直遍历到 1,所以在方法 A() 的代码实现中我们简单的加入对 m!m!m! 的求解即可,不需要为了求组合数还得多写一个求排列数的函数。
int A(int n, int m) {int up = 1; //分子int down = 1; //分母m = Math.min(m, n-m);for (int i = m; i >= 1; i--) {up *= n; //累乘得到分子n--; down *= i; //累乘得到分母}return up / down;
}
排列数 A(n, m) 与组合数 C(n, m) 的求法相关推荐
- 【组合数学】指数生成函数 ( 指数生成函数概念 | 排列数指数生成函数 = 组合数普通生成函数 | 指数生成函数示例 )
文章目录 一.指数生成函数 二.排列数指数生成函数 = 组合数普通生成函数 三.指数生成函数示例 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常 ...
- 排列数与组合数~~~~
先说两句废话 咳咳 今天突突突突突突突发奇想想写篇文章(?很神奇 然后开始翻笔记本 看看这个--水的失去浓度 看看这个--哎呀,学了,没会,也不出来 害,咋整... 偶然间,发现了一个对大家来说都很简 ...
- python计算排列数 组合数
组合排列介绍 一.编写函数计算组合数CniC^{i}_{n}Cni. def Combinatorial(n,i):'''设计组合数'''#n>=iMin=min(i,n-i)result=1 ...
- 多重集的排列数与组合数
多重集的排列数与组合数 设 S = { n 1 a 1 , n 2 a 2 , - , n k a k } S = \{ n_1a_1,n_2a_2,-,n_ka_k\} S={n1a1,n2a ...
- 组合数和排列数的关系
组合数 * (被选数的阶乘) = 排列数 排列数可以看做组合数选出来后再进行排序
- MATLAB计算阶乘、排列数与组合数
在1500件产品中有400件次品,1100件正品,任取200件 求恰有90件次品的概率; 求至少有两件次品的概率. 这是一道古典概型的概率问题,题目比较简单,很容易求得概率,其中 但是,计算量较大,于 ...
- C语言计算排列数和组合数
#include <stdio.h> int main(int argc, char *argv[]) {printf("%d \n",a(3,8));printf(& ...
- AcWing 1309. 车的放置 (加法原理、乘法原理、组合数排列数的求法、乘法逆元)
1309. 车的放置 分步做:先放上面的矩形,后考虑下面的矩形. 分类做:依次求出,上面放置 0 . 1 . 2 . - - . k 0.1.2.--.k 0.1.2.--.k个车的,而下面放置 k ...
- 排列组合思维导图_排列组合——排列数专题
在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...
最新文章
- SpringBoot定义统一的controller返回格式
- linux下电池测试软件,你们要的App电量分析测试来了
- Netty工作笔记0029---NIO 网络编程应用--群聊系统4--客户端编写2
- 佳能80d有人脸识别吗_2020单反/微单相机推荐,单反和微单(无反)选购攻略,佳能、尼康、索尼、富士、松下相机...
- 安装了java后,为什么有些jar不能执行
- Spring @RequestMapping 注解原理
- 人工智能行业现状与未来发展趋势
- 创维电视显示服务器异常,创维网络电视,看在线电影及网络异常的处理!
- 记一次无意间的bypass云锁的SQL注入
- SpringMVC接受参数
- 2023 软件库APP下载系统源码 附卡密会员插件
- layui弄一个好看的数据表格样式
- TCP报文之-tcp dup ack 、tcp Out-of-Order
- 看论文需要用到的一些专业词汇【SOTA,Benchmark,Baseline】
- Python 网络爬虫工具:httpx 和 parsel(对比测评)
- Primo Ramdisk内存盘工具软件
- typeScript学习笔记day02——小肉包
- 国自然热点|2022年组蛋白修饰文章精选回顾
- 微信悬浮窗图标显示如何配置
- 一英寸和一英尺倒底是多长?