【组合数学】知识点汇总
文章目录
- 一.排列
- 二.组合
- 三.重要定理及思想
一.排列
1.概念:从n个不同的元素中,取出m个排成一列,称为n个元素中取出m个元素的一个排列(permutation)
2.排列数:从n个不同元素中取出m个元素的排列方案数。符号记为AnmA^m_nAnm。
计算公式:Anm=n⋅(n−1)⋅(n−2)⋅⋅⋅(n−m+1)A^m_n=n\cdot(n-1)\cdot(n-2)\cdot\cdot\cdot(n-m+1)Anm=n⋅(n−1)⋅(n−2)⋅⋅⋅(n−m+1)
理解:从n个元素中取出m个进行排列,第一个元素有n种选择,第二个元素有n-1种选择……最后一个元素有n-m+1种选择
特殊地:当m>n时,排列数为0,当m=n时,又称全排列,排列数为n!
排列数的另一个计算公式:Anm=n!(n−m)!A^m_n=\frac{n!}{(n-m)!}Anm=(n−m)!n!
理解:
①可以直接由前面的式子数学推导而来
②先将n个元素进行全排列得到n!n!n!,然后取前m个元素的排列方案,每种方案都会重复(n−m)!(n-m)!(n−m)!次(后n-m个元素的全排列),所以要除以(n−m)!(n-m)!(n−m)!
3.圆排列
从n个元素中取m个元素圆排列的个数为Anmm=n!m⋅(n−m)!\frac{A_n^m}{m}=\frac{n!}{m\cdot(n-m)!}mAnm=m⋅(n−m)!n!
相当于每种排列方案都被重复计算了m次
比如m=3,则{1 2 3},{3 1 2} ,{2 3 1}都是同一种圆排列,但在算排列数时被计算了3次
4.多重集的排列
多重集:允许元素重复的特殊集合
如果每个元素可以取多次甚至无限次,从中取m个排列的方案数我们可以用生成函数(母函数)来计算
指数型母函数解多重集排列问题
5.错排问题
问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。
记n个元素的错排方案数为D(n)
随机取第k个元素,我们可以将其放置到除了k位置以外的其它任意位置,即n-1种选择
假设我们选择将第k个元素放置到m位置,则第m个元素位置被占了,要放到其它位置上,我们面临两种选择:
①将m元素放置到k位置上,即将m和k互换了位置,这两个元素错排完成,那现在场上还有n-2个元素没有排,即D(n-2)
②不把m元素放置到k位置上,那现在的情况就是m不能放在k位置上,我们不考虑已经放好的k元素,然后将k位置当作m的位置(因为m不能选k位置),是不是就是n-1个元素的错排呢?即D(n-1)。
综上,得递推公式D(n)=(n-1) [D(n-1)+D(n-2)]
该式经过一系列推导可得:
D(n)=n!⋅[(−1)00!+(−1)11!+(−1)22!+…+(−1)n−1(n−1)!+(−1)nn!]D(n) = n! \cdot [\frac{(-1)^0}{0!}+\frac{(-1)^1}{1!}+\frac{(-1)^2}{2!} + … + \frac{(-1)^{n-1}}{{(n-1)!}} +\frac{ (-1)^n}{n!}]D(n)=n!⋅[0!(−1)0+1!(−1)1+2!(−1)2+…+(n−1)!(−1)n−1+n!(−1)n]
(也可以用容斥原理的思想直接推导,详情见百度百科)
由泰勒展开ex=1+x+x22!+x33!+⋅⋅⋅+xkk!+⋅⋅⋅e^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdot\cdot\cdot+\frac{x^k}{k!}+\cdot\cdot\cdotex=1+x+2!x2+3!x3+⋅⋅⋅+k!xk+⋅⋅⋅
得D(n)=[n!⋅e−1+0.5)][n!\cdot e^{-1}+0.5)][n!⋅e−1+0.5)] 用[]表示向下取整,这么写是为了避免泰勒展开余项(余项值小于1/2)的0影响
二.组合
1 概念: 从n个不同的元素中,取出m个作为一组(不考虑顺序),称为从n个元素中取出m个的一个组合
2.组合数: 从n个不同元素中取出m个元素的组合方案数,符号记为CnmC_n^mCnm
计算公式:Cnm=Anmm!=n!(n−m)!⋅m!=n⋅(n−1)⋅(n−2)⋅⋅⋅(n−m+1)1⋅2⋅3⋅⋅⋅mC_n^m=\frac{A_n^m}{m!}=\frac{n!}{(n-m)! \cdot m!} = \frac{n\cdot(n-1)\cdot(n-2)\cdot\cdot\cdot(n-m+1)}{1\cdot2\cdot3\cdot\cdot\cdot m}Cnm=m!Anm=(n−m)!⋅m!n!=1⋅2⋅3⋅⋅⋅mn⋅(n−1)⋅(n−2)⋅⋅⋅(n−m+1)
理解:从n个元素中取出m个元素的排列数为AnmA_n^mAnm,取出的m个元素排列方案数为m!,而组合是不考虑元素的排列顺序的,所以相当于每种组合方案被算了m!次。
3.多重集的组合
普通型母函数解多重集组合问题详解
4.常用公式
①Cnm=Cnn−mC_n^m=C_n^{n-m}Cnm=Cnn−m (当m较大时计算Cnn−mC_n^{n-m}Cnn−m)
②Cnm=Cn−1m+Cn−1m−1C_n^m=C_{n-1}^m+C_{n-1}^{m-1}Cnm=Cn−1m+Cn−1m−1(杨辉三角形,一数等于其肩上两数之和)
③Cnm=n−m+1mCnm−1C_n^m=\frac{n-m+1}{m}C_n^{m-1}Cnm=mn−m+1Cnm−1(分子分母各抽出一项)
作用:递推求组合数
5.求组合数方法
n,m很小时,直接求都行。
n,m很大时,一般会对p取模(因为组合数太大了),且题目中p一般为素数(合数作取模运算容易被找出规律)
对p取模时:
1)n,m很小时可以用杨辉三角形递推求(即上式②)
2)预处理模p后的阶乘,然后用乘法逆元求亦可
3)n,m很大很大时,p很小可以用卢卡斯定理求(见卢卡斯定理)
如果m不大的话,用上式③也可以
三.重要定理及思想
1.计数基本原理
计数最基本的两个原理:加法原理和乘法原理
①加法原理:
做一件事情有n个办法,每个办法有pip_ipi个方案实现,则共有p1+p2+p3+⋅⋅⋅+pnp_1+p_2+p_3+\cdot\cdot\cdot +p_np1+p2+p3+⋅⋅⋅+pn种方案
应用加法原理的关键是分类,每个类别间应该不重不漏,若有重复,可以使用容斥原理。
②容斥原理:
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复。
例:班里有15个人喜欢数学,20个人喜欢语文,7个人既喜欢数学又喜欢语文,则班级的总人数应为:15+20-7=28.
若将喜欢数学的人记作集合A,喜欢语文的人记作集合B,总班级总人数∣A∪B∣=∣A∣+∣B∣−∣A∩B∣|A∪B|=|A|+|B|-|A∩B|∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
当计数的事物有A、B、C三类时,则三类事物的总个数应该为∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣B∩C∣−∣A∩C∣+∣A∩B∩C∣|A∪B∪C|=|A|+|B|+|C|-|A∩B|-|B∩C|-|A∩C|+|A∩B∩C|∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣B∩C∣−∣A∩C∣+∣A∩B∩C∣
以此类推:当计数的事物有N类时,含奇数个集合的交集取正、含偶数个交集的集合取负,求和即得总数
③乘法原理:
做一件事情有n个步骤,每个步骤有pip_ipi个方案实现,则共有p1⋅p2⋅p3⋅⋅⋅pnp_1\cdot p_2\cdot p_3\cdot\cdot\cdot p_np1⋅p2⋅p3⋅⋅⋅pn种方案
2.鸽巢原理: 又称抽屉原理,即:
桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面放不少于两个苹果。
应用:是组合数学中很重要的思想,但一般体现在思考的过程中。可以参考这两题:鸽巢原理
3.隔板法
n本相同的书放在k个不同的书架上
(n个相同的小球放在k个不同的盒子里)
①插入k-1个隔板
②将这k-1个隔板和书视为一样的元素,进行全排列,得到方案数(n+k−1)!(n+k-1)!(n+k−1)!
③因为隔板,书都是相同的,所以方案数要除以(k−1)!(k-1)!(k−1)!和n!n!n!
④即算得方案数(n+k−1)!(k−1)!⋅n!=Cn+k−1n=Cn+k−1k−1\frac{(n+k-1)!}{(k-1)!\cdot n!}=C_{n+k-1}^n=C_{n+k-1}^{k-1}(k−1)!⋅n!(n+k−1)!=Cn+k−1n=Cn+k−1k−1
更多相关知识可以参考这篇文章:隔板法
4.卢卡斯定理
详情见卢卡斯定理,模板加证明都有
【组合数学】知识点汇总相关推荐
- 原生 遍历_细品原生JS从初级到高级知识点汇总(三)
作者:火狼1 转发链接:https://juejin.im/post/5daeefc8e51d4524f007fb15 目录 细品原生JS从初级到高级知识点汇总(一) 细品原生JS从初级到高级知识点汇 ...
- mysql 事物状态有几种_MySQL知识点汇总:亿级高并发数据库运转原理大公开!
- 点击上方"中国统计网"订阅我吧!- 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对 ...
- java基础知识大全,java 基础知识点汇总
java 基础知识点汇总 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个Strin ...
- python拷贝是什么知识点_python闭包、深浅拷贝、垃圾回收、with语句知识点汇总...
1.1 闭包 1.闭包概念 1. 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包 2. 一般情况下,在我们认知当中,如果一个函数 ...
- list python 访问 键值对_基础|Python常用知识点汇总(中)
字符串字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串.1.创建字符串 str1 = 'Hello World!' str2 = "Hello W ...
- javaSE知识点汇总
javaSE知识点汇总 Java基础知识精华部分 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实 ...
- php知识点汇总与解答_PHP操作员能力倾向问题与解答
php知识点汇总与解答 This section contains Aptitude Questions and Answers on PHP Operators. 本节包含有关PHP运算符的 Apt ...
- ES6知识点汇总(全)
ES6知识点汇总(全) 近期在整理ES6相关开发文档,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总. 一.问:ES6是什么,为什么要学习它,不学习ES6会怎么样? 答: ES6是新一代的 ...
- 计算机知识点汇总职高,计算机辅导(知识点汇总) - 慈溪职高 网站首页.doc
计算机辅导(知识点汇总) - 慈溪职高 网站首页 知识点汇总 第一章 计算机基础知识(单选15分) 第一台计算机:1946年ENIAC,采用电子管 划分计算机时代的标准:构成元件 第一代(1946-1 ...
- 前端面试高频考点,ES6知识点汇总!!!
前端面试高频考点,ES6知识点汇总!!! ⛳️大家好,我是王同学,今天给大家分享的是ES6面试的高频考点,文章没有一点套路,只有满满的干货 ⛳️如果对你有帮助就给我点个赞吧,这样我们就互不相欠了 ⛳️ ...
最新文章
- HDU 3555 Bomb (数位DP-记忆化搜索模板)
- service和thread的区别,何时用service,何时用thread?
- easypoi list中的map导出_Java中的集合类(List,Set.Map)
- HDU4279(2012年天津网络赛---数论分析题)
- springboot配置https访问
- 回车 触发 提交事件
- Tell me why -- Declan Galbraith
- dataframe 上下拼接_pandas DataFrame 的横向纵向拼接组合
- 从零开始学习音视频编程技术(41) H.264播放器
- 微信公众号自动回复如何添加超链接
- html显示tif图片,呈现HTML中的TIF文件
- uniapp安卓创建桌面快捷方式
- Openbravo ERP 3.0安装指南
- Kotlin-Android世界的一股清流-委托
- 用2553单片机实现按键倒计时响铃,用TM1637显示倒计时时间
- okio 原理分析(一)
- 惠普android开发,惠普官方宣布不再采用Android:将开发PalmPad
- C#winform画图简易制作
- vant 框架使用方式H5
- cs224w(图机器学习)2021冬季课程学习笔记2: Traditional Methods for ML on Graphs
热门文章
- WIN7的IE11中安装activex控件
- 计算机辅助设计与制造实习周记,计算机辅助设计与制造专业毕业实习周记范文原创全套.pdf...
- mysql数据库中eof_数据库eof
- 初学C语言 输出图形
- android中jni的调用过程,Android中JNI的调用生成头文件步骤
- 推荐下载使用:COMODO Internet Security V5.0.157302.1066 多国语言版(含:简体中文)
- 有关NotifyIcon的使用
- 串口通讯 电脑和dsp_Sci 使用DSP2812的SCIA模块和PC机进行串口通信,用FIFO功能实现数据的发送和接受。 DSP program 261万源代码下载- www.pudn.com...
- 软件体系结构期末复习资料
- 【C++沉思录】代理类