排列组合公式的原理_有序排列组合公式

排列组合公式的原理_有序排列组合公式绪论:加法原理、乘法原理#分类计数原理:做一件事,有n类办法,在第1类办法中有m1种不同的方法,在第2类办法中有m2种不同的方法,…,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+…+mn种不同的方法。分步计数原理:完成一件事,需要分成n个步骤,做第1步有m1种不同的方法,做第2步有m2种不同的方法,…,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×⋯×mn种不同的方法。区别:分类计数原理是加法原理,不同的类加起来就是我要得到的总数;分步计数原理是乘法原理,是同一

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

绪论:加法原理、乘法原理#
分类计数原理:做一件事,有n类办法,在第1类办法中有m1种不同的方法,在第2类办法中有m2种不同的方法,…,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+…+mn种不同的方法。

分步计数原理:完成一件事,需要分成n个步骤,做第1步有m1种不同的方法,做第2步有m2种不同的方法,…,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×⋯×mn种不同的方法。

区别:分类计数原理是加法原理,不同的类加起来就是我要得到的总数;分步计数原理是乘法原理,是同一事件分成若干步骤,每个步骤的方法数相乘才是总数。

排列问题

排列数#
从n个不同元素种取出m(m≤n)个元素的所有不同排列的个数,叫做从n个不同元素种取出m个元素的排列数,用符号Amn表示。

排列数公式#
Amn=n(n−1)(n−2)⋯(n−m+1)=n!(n−m)!,n,m∈N∗,并且m≤n
(规定0!=1)

推导:把n个不同的元素任选m个排序,按计数原理分步进行:

取第一个:有n种取法;
取第二个:有(n−1)种取法;
取第三个:有(n−2)种取法;
……
取第m个:有(n−m+1)种取法;

根据分步乘法原理,得出上述公式。

排列数性质#
Amn=nAm−1n−1 可理解为“某特定位置”先安排,再安排其余位置。

Amn=mAm−1n−1+Amn−1 可理解为:含特定元素的排列有mAm−1n−1,不含特定元素的排列为Amn−1。

组合问题

组合数#
从n个不同元素种取出m(m≤n)个元素的所有不同组合的个数,叫做从n个不同元素种取出m个元素的组合数,用符号Cmn表示。

组合数公式#
Cmn=AmnAmm=n(n−1)(n−2)⋯(n−m+1)m!=n!m!(n−m)!,n,m∈N∗,并且m≤n
C0n=Cnn=1
证明:利用排列和组合之间的关系以及排列的公式来推导证明。

将部分排列问题Amn分解为两个步骤:

第一步,就是从n个球中抽m个出来,先不排序,此即组合数问题Cmn;

第二步,则是把这m个被抽出来的球排序,即全排列Amm。

根据乘法原理,Amn=CmnAmm,那么

Cmn=AmnAmm=n(n−1)(n−2)⋯(n−m+1)m!=n!m!(n−m)!
组合数的性质#
Cmn=Cn−mn 可以理解为:将原本的每个组合都反转,把原来没选的选上,原来选了的去掉,这样就变成从n个元素种取出n−m个元素,显然方案数是相等的。

递推公式Cmn=Cmn−1+Cm−1n−1 可理解为:含特定元素的组合有Cm−1n−1,不含特定元素的排列为Cmn−1。还不懂?看下面。

Example

从1,2,3,4,5(n=5)中取出2(m=2)个元素的组合(Cmn):

12 13 14 15 23 24 25 34 35 45

显然,这些组合中要么含有元素“1”,要么不含。

其中含有“1”的是:12 13 14 15

把里面的“1”都挖掉:2 3 4 5

而上面这个等价于从2,3,4,5(n−1)中取出1(m−1)个元素的组合。

其中不含“1”的是:23 24 25 34 35 45
上面等价于从2,3,4,5(n−1)中取出2(m)个元素的组合。

而总方案数等于上面两种情况方案数之和,即Cmn=Cmn−1+Cm−1n−1。

组合数求和公式#
C0n+C1n+C2n+⋯+Cnn=2n
我们感性认知一下,上面这个式子的左边表示什么呢?

把从n个球中抽出0个球的组合数(值为1)、抽出1个球的组合数、抽出2个球的组合数、……、抽出n个球的组合数相加。

换句话说,就是从n个球中随便抽出一些不定个数球,问一共有多少种组合。

对于第1个球,可以选,也可以不选,有2种情况。
对于第2个球,可以选,也可以不选,有2种情况。
对于任意一个球,可以选,也可以不选,有2种情况。

根据乘法原理,一共2×2×⋯×2⏟n个2相乘=2n种组合。

想要严谨的证明?数学归纳法:

当m=1时,C01+C11=2=21成立。

假设n=k(k∈N∗)时等式成立,即

k∑i=0Cik=2n
成立,当n=k+1时,

C0k+1+C1k+1+C2k+1+⋯+Ckk+1+Ck+1k+1=C0k+1+(C0k+C1k)+(C1k+C2k)+⋯+(Ck−1k+Ckk)+Ck+1k+1=(C0k+C1k+C2k+⋯+Ckk)+(C0k+C1k+C2k+⋯+Ckk)=2×2k=2k+1
等式也成立。

由1、2得,等式对n∈N∗都成立。

也可偷懒地用二项式定理证明(其实二项式定理也是用数学归纳法证明的):

(a+b)n=n∑k=0Cknan−kbk
令a=b=1,就得到了

n∑i=0Cin=2n
类似的公式(由Cmn=Cn−mn推导):

C0n+C2n+C4n+⋯=C1n+C3n+C5n+⋯=2n−1

杨辉三角

这个神奇的图形和组合数、二项式定理密切相关。

杨辉三角可以帮助你更好地理解和记忆组合数的性质:

第n行的m个数可表示为 Cm−1n−1,即为从n−1个不同元素中取m−1个元素的组合数。

第n行的数字有n项。

每行数字左右对称(第n行的第m个数和第n−m+1个数相等,Cmn=Cn−mn),由1开始逐渐变大。

每个数等于它上方两数之和(第n+1行的第i个数等于第n行的第i−1个数和第i个数之和,即Cin+1=Cin+Ci−1n)。

(a+b)n的展开式中的各项系数依次对应杨辉三角的第n+1行中的每一项(二项式定理)。

以下来自维基百科

二项式系数

二项式系数可排列成帕斯卡三角形。
在数学上,二项式系数是二项式定理中各项的系数。一般而言,二项式系数由两个非负整数n和k为参数决定,写作,定义为的多项式展开式中,项的系数,因此一定是非负整数。如果将二项式系数写成一行,再依照顺序由上往下排列,则构成帕斯卡三角形。 (nk)(1+x)nxk(n0),(n1),…,(nn)n=0,1,2,…

二项式系数常见于各数学领域中,尤其是组合数学。事实上,可以被理解为从n个相异元素中取出k个元素的方法数,所以大多读作「n取k」。二项式系数的定义可以推广至n是复数的情况,而且仍然被称为二项式系数。

二项式系数亦有不同的符号表达方式,包括:C(n,k)、nCk、nCk、、[注3],其中的C代表组合(combinations)或选择(choices)。很多计算机使用含有C的变种记号,使得算式只占一行的空间,相同理由也发生在置换数,例如写作P(n,k)。 CknCnkPnk

定义及概念
对于非负整数n和k,二项式系数定义为的多项式展开式中,项的系数,即 (nk)(1+x)nxk

(1+x)n=n∑k=0(nk)xk=(n0)+(n1)x+⋯+(nn)xn
事实上,若x、y为交换环上的元素,则

(x+y)n=∑nk=0(nk)xnkyk

此数的另一出处在组合数学,表达了从n物中,不计较次序取k物有多少方式,亦即从一n元素集合中所能组成k元素子集的数量。

计算二项式系数

除展开二项式或点算组合数量之外,尚有多种方式计算的值。 (nk)

递归公式
以下递归公式可计算二项式系数:

(nk)=(n−1k−1)+(n−1k)∀n,k∈N

其中特别指定:

(n0)=1∀n∈N∪{0},(0k)=0∀k∈N.

此公式可由计算(1 + X ) n −1 (1 + X )中的X k项,或点算集合{1, 2, …, n }的k个元素组合中包含n与不包含n的数量得出。

显然,如果k > n,则。而且对所有n,,故此上述递归公式可于此等情况下中断。递归公式可用作建构帕斯卡三角形。 \tbinom nk=0\tbinom nn=1

帕斯卡三角形(杨辉三角)

有关二项式系数的恒等式

关系式

阶乘公式能联系相邻的二项式系数,例如在k是正整数时,对任意n有:

(n+1k)=(nk)+(nk−1)
(nk)=nk(n−1k−1)
(n−1k)−(n−1k−1)=n−2kn(nk)
两个组合数相乘可作变换:

(ni)(im)=(nm)(nmim)
n∑r=0(nr)=2n
k∑r=0(n+r−1r)=(n+kk)
nk∑r=0(−1)r(n+1)k+r+1(nkr)=(nk)−1
n∑r=0(dndr)=1dd∑r=1(1+e2πrid)dn
n∑i=m(a+ii)=(a+n+1n)−(a+mm−1)
(a+mm−1)+(a+mm)+(a+m+1m+1)+…+(a+nn)=(a+n+1n)
Fn=∞∑i=0(nii)
Fn−1+Fn=∞∑i=0(n−1−ii)+∞∑i=0(nii)=1+∞∑i=1(nii−1)+∞∑i=1(nii)=1+∞∑i=1(n+1−ii)=∞∑i=0(n+1−ii)=Fn+1
主条目:朱世杰恒等式

n∑i=m(ia)=(n+1a+1)−(ma+1)(ma+1)+(ma)+(m+1a)…+(na)=(n+1a+1)
二阶求和公式

n∑r=0(nr)2=(2nn)
n∑i=0(r1+n−1−ir1−1)(r2+i−1r2−1)=(r1+r2+n−1r1+r2−1)
(1−x)−r1(1−x)−r2=(1−x)−r1−r2
(1−x)−r1(1−x)−r2=(∞∑n=0(r1+n−1r1−1)xn)(∞∑n=0(r2+n−1r2−1)xn)=∞∑n=0(n∑i=0(r1+n−1−ir1−1)(r2+i−1r2−1))xn
(1−x)−r1−r2=∞∑n=0(r1+r2+n−1r1+r2−1)xn
主条目:范德蒙恒等式

k∑i=0(ni)(mki)=(n+mk)
三阶求和公式
主条目:李善兰恒等式

(n+kk)2=k∑j=0(kj)2(n+2k−j2k)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179566.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 阿里核心系统团队博客在哪_阿里云是谁创始人

    阿里核心系统团队博客在哪_阿里云是谁创始人http://csrd.aliapp.com/阿里核心系统团队博客基础极致分享Home招聘信息阿里核心系统团队介绍TFS运维平台改造1604天bylinqinginTFSTFS负责运维的同学在工作过程中,积累了各种运维脚本

  • 自监督学习和无监督学习的区别

    自监督学习和无监督学习的区别无监督学习无监督学习不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类相关的任务自监督学习和无监督学习不同,自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。换句话说:自监督学习的监督信息不是人工标注的,而是是通过辅助任务(pretext)在大规模无监督数据中自动构造监督信息,通过得到的标签,就可以类似有监督学习一样进行训练。区别自监督学习是从数据本身找标签来进行

  • 某音信息案例_关于信息泄露的案例

    某音信息案例_关于信息泄露的案例抓包。抓到了一个share_url我访问过去看了下,https://www.iesdouyin.com/share/user/102064772608有数据的。那就拿数据。然后发现它的数字做了字符集映射。搞他。下载.ttf的文件,s3a.bytecdn.cn/ies/resource/falcon/douyin_falcon/static/font/iconfont_da2e2…

  • SpringCloud从入门到精通教程/SpringCloud Alibaba从入门到精通教程[通俗易懂]

    对于SpringCloud,很多小伙伴问到了我的研究学习资料来源,除官方文档外,特例完整整理一下自己的平时参考学习其他资料,以及分享实战项目源码和代码资源,供大家参考学习主要教程:SpringCloud教程SpringCloudGreenwich,基于SpringBoot2.1.7,Github源码仓库案例下载一、我的教程(2019.11更新)SpringCloud…

  • 计算机为什么要用补码运算_补码运算溢出后怎么算

    计算机为什么要用补码运算_补码运算溢出后怎么算计算机为什么用补码运算使用补码,可以将符号位和数值域统一处理,从而简化运算规则、简化运算器的结构,提高运算速度;使减法运算转换为加法运算,进一步简化计算机中运算器的电路设计两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃,而这样计算仍然正确;采用补码表示还有另外一个原因,那就是为了防止0机器数有两个编码。原码和反码表示的0有两种形式+0和-0,而采用补码表示的时候,00000000是+0即0,10000000不再是-0而是-128这样,补码表示的数的范围就是-128~+127,不

  • CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」

    CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」CefSharp是做什么用的?请看前一篇文章:怎么用c#编写浏览器或者执行javascript代码?之后就是如何开发了。这个CefSharp最坑的是,还早不到文档,只能看着官方给的例子开发。项目地址那么就可以看到,带有example的都是例子。我给大家举2个例子。1.事件添加:我想让我的程序出了网页上的js代码,再额外的执行我自己写的js,怎么办呢?InitializeCom

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号