加法原理和乘法原理,是排列组合中的二条基本原理,在解决计数问题中经常运用。掌握这两条原理,并能正确区分他们,至关重要。

加法原理

若完成一件事情有3类方式,其中第一类方式有1种方法,第二类方式有3种方法,第三类有2种方法,这些方法都不相同,但任选一种方法都可以完成此事,则完成这件事情共有1+3+2=6种方法,这一原理称为加法原理。
例如:从甲地到乙地有三类方式,一是汽车,二是火车,三是飞机。若一天中汽车有2班,火车有4班,飞机有一班,那么从甲地到乙地共有多少种不同的走法。共有2+4+1=7种。

乘法原理

若完成一件事情分r个步骤,其中第一个步骤有m1种方法,第二个步骤有m2种方法……第步骤共有mr种方法,各步骤连续或同时完成,这件事才算完成,则完成这件事共有m1*m2*……*mr种方法。
例如:从甲地到丙地必须经过乙地。从甲地到乙地有4条路线,从乙地到丙地有3条路线,问从甲地到丙地共有多少种不同的走法?
解:要从甲地到达丙地,必须经过两个步骤:先从甲地到乙地,有4条路线;再从乙地到丙地,有3条路线。只有这两个步骤都完成了,才能完成这种事情,缺少哪一个步骤都不行。因此从甲地到丙地共有4*3=12种走法。

加法原理和乘法原理的区别

以上两个基本原理在排列组合问题中将会反复使用。这两个原理回答的都是关于完成一件事情的不同方法的种数问题,但是又有根本区别。加法原理针对的是“分类”问题,若完成一件事情有多类方式,每一类方式的各种方法相互独立,用其中任何一种方法都可以完成这件事情,则用加法原理;而乘法原理针对的是“分步”问题,若完成一件事情必须依次经过多个步骤,每一个步骤的各种方法相互依存,只有各种步骤都完成才算做完成这种事情,则这时用乘法原理

排列数公式推理过程

例:用1、2、3这3个数字可以组成多少个数字十位和个位不重复的两位数?
解:要组成数字不重复的两位数,需要经过两个步骤:第一步确定十位上的数,数字1、2、3都可以放在十位上,共有3种方法;第二步确定个位上的数,因为要求个位数与十位数不能重复,所以个位上的数,只能从三个数字中去掉十位数后所剩的两个数字中任选一个,共有2种方法。只有十位和个位上的数都确定了,才能组成数字不重复的两位数,这两个步骤缺少哪一个都不行。因此,根据乘法原理,3*2=6.

上例中,我们把数字1、2、3称为元素。组成数字不重复的两位数这个问题,从3个不同的元素中任取2个,然后按顺序排成一列数,由于这样的排列与数字不重复的两位数是一一对应的,因此求数字不重复的两位数的个数等同于求这样的排列个数。

推理过程:从n个不同元素中取出m个不同元素排成一列,必须经过m个步骤。
第一步,确定第1个位置上的元素,可以从这n个元素中任取1个放在这个位置上,共有n种方法,即n-(1-1)括号内为位置数减1;
第二步,确定第2个位置上的元素,可以从剩下的n-1个元素中任取1个放在这个位置上,共有n-1种方法,即n-(2-1);
……
第m步,确定第m位置上的元素,第m位置上的元素从剩下的n-(m-1)个元素中任选一个,共有n-m+1种方法。根据乘法原理,全部确定这m个位置的元素共有n(n-1)(n-2)……*(n-m+1)种方法。由于一种方法对应一个排列,所以所有这样排列的个数即排列数。

不可重复排列数公式.png

组合

排列是一个与次序有关的概念,如12,21这两个数字是两个不同的排列,但是在组合里,12和21是一个意思,因为12和21都是由1和2组合而成的,所以顺序并不会影响对组合的判断,因此,组合是与排列概念不同的问题。

从n个不同的元素中,每次取出m个(m<=n)不同元素,不考虑顺序组成一组,叫做从n个元素中每次取出m个元素的组合。这样得出的组合个数称为组合数,记作C (n,m)

求从n个不同元素中取出m个元素的排列数A(n,m),可以按以下两个步骤进行:
第一步,求出这n个不同元素中取出m个元素的组合数C (n,m),
第二步,求出每一个组合中m个元素的全排列数A(m,m),根据乘法原理得出,A(n,m)=C (n,m)*A(m,m),

不可重复组合公式:C (n,m)=A(n,m)/A(m,m)=n!/m!(n-m)!,
可重复组合公式:C (n,m)=(m+n-1)!/(m!(n-1)!)
对于实际问题,必须正确判别是排列问题还是组合问题,其区别的关键在于要不要将所取出的元素进行排队。若要排队,则是排列问题,若不要排队,则是组合问题。
以下为组合数计算器python代码。
#!/usr/bin/env python3
# -
- coding: utf-8 -*-

import math
from tkinter import *
class Window:def __init__(self, title='组合数计算器', width=300, height=120, staFunc=bool, stoFunc=bool):self.w = widthself.h = heightself.stat = Trueself.staFunc = staFuncself.stoFunc = stoFuncself.staIco = Noneself.stoIco = Noneself.root = Tk(className=title)def drawCenter(self):ws = self.root.winfo_screenwidth()#用户屏幕宽度hs = self.root.winfo_screenheight()#用户屏幕高度x = int( (ws/2) - (self.w/2) )#距屏幕左边框的像素点数y = int( (hs/2) - (self.h/2) )#距屏幕上边框的像素点数self.root.geometry('{}x{}+{}+{}'.format(self.w, self.h, x, y))def createWidgets(self):Label(self.root, text="所有元素数n:").grid(row=0,sticky=E)Label(self.root, text="取出的元素数m:").grid(row=1,sticky=E)Label(self.root, text="不可重复组合数:").grid(row=2,sticky=E)Label(self.root, text="可重复组合数:").grid(row=3,sticky=E)self.e1 = Entry(self.root)self.m = StringVar()self.e2 = Entry(self.root,textvariable=self.m)self.a1 = StringVar()self.e3 = Entry(self.root,textvariable=self.a1)self.a2 = StringVar()self.e4 = Entry(self.root,textvariable=self.a2)self.e1.grid(row=0, column=1)self.e2.grid(row=1, column=1)self.e3.grid(row=2, column=1)self.e4.grid(row=3, column=1)self.btnSer = Button(self.root, command=self.click, width=3, height=1,text='运行')self.btnSer.grid(row=4,column=1,sticky=E)btnQuit = Button(self.root, text='关闭窗口', command=self.root.quit, width=8, height=1)btnQuit.grid(row=4,column=2)def click(self):n=int(self.e1.get())m =int(self.e2.get())#组合数a1=math.factorial(n)/math.factorial(m)/math.factorial(n-m)self.a1.set(int(a1))#不可重复组合数a2=math.factorial(n+m-1)/(math.factorial(m)*math.factorial(n-1))self.a2.set(int(a2))def loop(self):self.root.resizable(False, False)   #禁止修改窗口大小self.createWidgets()self.drawCenter()                       #窗口居中self.root.mainloop()if __name__ == '__main__':w = Window(width=350, height=150)w.loop()

有5个数字,取两个数字进行组合的计算结果。

组合数计算器.png

作者:勇赴
链接:https://www.jianshu.com/p/82dcdf423aa1
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

排列组合——排列公式的推理和组合相关推荐

  1. 【组合数学】排列组合 ( 排列组合示例 )

    文章目录 一.排列组合示例 1 ( 组合 | 乘法法则 | 加法法则 ) 二.排列组合示例 2 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示 ...

  2. 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )

    文章目录 一.排列组合内容概要 二.选取问题 三.集合排列 四.环排列 五.集合组合 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排 ...

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

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

  4. 递归学习_组合_全组合排列

    Sample Input 3 1 2 3 Sample Output 123 132 213 231 312 321 #include <iostream> using namespace ...

  5. python以环状形式组合排列图片并输出的方法

    python以环状形式组合排列图片并输出的方法 本文实例讲述了python以环状形式组合排列图片并输出的方法.分享给大家供大家参考.具体分析如下: 这段代码可以自定义一个空白画板,然后将指定的图片以圆 ...

  6. 索玛立方体所有组合/排列,解决方案及代码实现

    基本情况介绍:索玛立方体(3*3*3),可由7块不同形状的积木拼成,且积木标以不同的颜色,即yellow, green, purple, orange, red, dark blue, baby bl ...

  7. 详细总结组合排列的十余种算法实现

    目录 •写在前面 •问题引入 •暴力枚举 循环枚举 递归枚举 回溯枚举 •深度优先搜索 前序遍历 中序遍历 后序遍历 •字典序 •二进制位运算 •带重复数字 •总结 •写在前面 排列组合的问题,如果没 ...

  8. 123456数字组合排列(5个数组合不能重复)

    package com.mingrisoft; import java.util.Arrays; public class Number { /** * @param args */ //123456 ...

  9. 组合辛普森公式(数值积分)

    问题描述 组合辛普森公式求函数f(x)=2+sin(2*sqrt(x))的积分近似值. 输入形式 在屏幕上依次输入积分上限.下限和等距子区间个数. 输出形式 输出使用组合辛普森公式求得的积分近似值. ...

  10. 通达信MACD和KDJ组合指标公式,MACD和KDJ怎么配合使用

    MACD指标属于趋势指标,KDJ指标属于震荡指标,MACD和KDJ配合使用会擦出怎样的火花? 一.平替版KDJ底背离 之前介绍过平替版MACD底背离,平替版KDJ底背离写法类似,总的来说写法相对简单, ...

最新文章

  1. html文字自动上翻,jQuery超酷文字随机翻转变换动画特效
  2. Docker私有仓库搭建与配置
  3. UOJ #590. 天天和树
  4. matlab做计算器纯代码,**matlab GUI-纯编程实现简单计算器**
  5. 电脑配置清单_2020年4月最新高性价比电脑配置清单放送,装机不迷路
  6. linux将db2账户添加到组_超实用的shell脚本--Linux安全加固设置,值得收藏
  7. 开始我的blog之旅
  8. jsp 页面中文乱码解决(笔记)
  9. git全局配置用户名和密码_git---全局设置用户名、密码、邮箱
  10. python怎样查看describe的结果_Python学习第126课--pandas拿到数据后的总体描述
  11. Ubuntu20.04 设置开机自启shell脚本
  12. kerberos的系统搭建
  13. html在新网页输出结果是,JavaScript考试试卷
  14. linux怎么使用西部数据,「轉」Linux下西部数据C1门解决方法
  15. java 根据条码字体_barcode4j使用自定义字体生成条形码
  16. 解析xml的四种方式
  17. 《走出幻觉,走向成熟》--读书笔记1
  18. JS获取当前时间的日周月年的开始结束时间
  19. WIFI信号强度获取
  20. html默认样式重置,我们真的需要CSS重置来清除默认样式吗?

热门文章

  1. 解非齐次线性方程组c语言,解非齐次线性方程组C语言程序设计.pdf
  2. springboot+vue解决跨域问题
  3. 黑帽SEO强势技术大纲
  4. C# 给PowerPoint文档设置背景颜色和背景图片
  5. leetcode 1179
  6. 为什么说HTTP协议是无状态的
  7. 基于Eviews的稳定性检验——以个股的β系数为例(含ADF检验步骤及结果分析)
  8. 马氏距离 java实现_Python怎么实现马氏距离
  9. python gdal迭代写为ENVI的dat格式
  10. 学英语尽量不要从背词汇表开始