一、什么是排列,什么是组合?

排列

从 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) 的求法相关推荐

  1. 【组合数学】指数生成函数 ( 指数生成函数概念 | 排列数指数生成函数 = 组合数普通生成函数 | 指数生成函数示例 )

    文章目录 一.指数生成函数 二.排列数指数生成函数 = 组合数普通生成函数 三.指数生成函数示例 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常 ...

  2. 排列数与组合数~~~~

    先说两句废话 咳咳 今天突突突突突突突发奇想想写篇文章(?很神奇 然后开始翻笔记本 看看这个--水的失去浓度 看看这个--哎呀,学了,没会,也不出来 害,咋整... 偶然间,发现了一个对大家来说都很简 ...

  3. python计算排列数 组合数

    组合排列介绍 一.编写函数计算组合数CniC^{i}_{n}Cni​. def Combinatorial(n,i):'''设计组合数'''#n>=iMin=min(i,n-i)result=1 ...

  4. 多重集的排列数与组合数

    多重集的排列数与组合数 设 S = { n 1 a 1 , n 2 a 2 , - , n k a k } S = \{ n_1a_1,n_2a_2,-,n_ka_k\} S={n1​a1​,n2​a ...

  5. 组合数和排列数的关系

    组合数 * (被选数的阶乘) =   排列数 排列数可以看做组合数选出来后再进行排序

  6. MATLAB计算阶乘、排列数与组合数

    在1500件产品中有400件次品,1100件正品,任取200件 求恰有90件次品的概率; 求至少有两件次品的概率. 这是一道古典概型的概率问题,题目比较简单,很容易求得概率,其中 但是,计算量较大,于 ...

  7. C语言计算排列数和组合数

    #include <stdio.h> int main(int argc, char *argv[]) {printf("%d \n",a(3,8));printf(& ...

  8. AcWing 1309. 车的放置 (加法原理、乘法原理、组合数排列数的求法、乘法逆元)

    1309. 车的放置 分步做:先放上面的矩形,后考虑下面的矩形. 分类做:依次求出,上面放置 0 . 1 . 2 . - - . k 0.1.2.--.k 0.1.2.--.k个车的,而下面放置 k ...

  9. 排列组合思维导图_排列组合——排列数专题

    在上篇关于排列组合主要考点的介绍中,正男老师提到:排列组合考点通常可以拆分为排列数考点和组合数考点.排列数考点相关试题可以细分为2类,分别为:穷举问题和限制条件问题.本期正男老师就从近六年内的5道涉及 ...

最新文章

  1. SpringBoot定义统一的controller返回格式
  2. linux下电池测试软件,你们要的App电量分析测试来了
  3. Netty工作笔记0029---NIO 网络编程应用--群聊系统4--客户端编写2
  4. 佳能80d有人脸识别吗_2020单反/微单相机推荐,单反和微单(无反)选购攻略,佳能、尼康、索尼、富士、松下相机...
  5. 安装了java后,为什么有些jar不能执行
  6. Spring @RequestMapping 注解原理
  7. 人工智能行业现状与未来发展趋势
  8. 创维电视显示服务器异常,创维网络电视,看在线电影及网络异常的处理!
  9. 记一次无意间的bypass云锁的SQL注入
  10. SpringMVC接受参数
  11. 2023 软件库APP下载系统源码 附卡密会员插件
  12. layui弄一个好看的数据表格样式
  13. TCP报文之-tcp dup ack 、tcp Out-of-Order
  14. 看论文需要用到的一些专业词汇【SOTA,Benchmark,Baseline】
  15. Python 网络爬虫工具:httpx 和 parsel(对比测评)
  16. Primo Ramdisk内存盘工具软件
  17. typeScript学习笔记day02——小肉包
  18. 国自然热点|2022年组蛋白修饰文章精选回顾
  19. 微信悬浮窗图标显示如何配置
  20. 一英寸和一英尺倒底是多长?

热门文章

  1. 海参无线呼叫服务器,简单介绍无线呼叫器原理
  2. 三、小脚本<%##%>
  3. Android APP调起拼多多的商品页
  4. Telegram学习解析系列(一):认识一下Telegram的源码
  5. linux prelink卸载,How to enable prelink
  6. 【数据库】第九章习题
  7. 微信小程序开发笔记 进阶篇②——多个微信小程序一个用户体系,同一个UnionID
  8. SCN Headroom
  9. 如何删除PDF文档里的空白页
  10. 【亚马逊运营】优惠券是怎么扣费的你都知道吗?