§1基本原理

△让我们来看下面问题:
  从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船。一天中,火车有4班,汽车有2班,轮船有3班。那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?
△分析:因为从甲地到乙地,乘火车有4种选择(方法),乘汽车有2种选择(方法),乘轮船有3种选择(方法)。因此,一天中乘坐这些交通工具从甲地到乙地共有:4+2+3 = 9种不同的方法。

▲一般地,做一件事,完成它可以有n类方法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有m n种不同的方法,
那么完成这件事共有:N = m1+m2+…+m n种不同的方法。

一、加法原理:
  △再看这样一个例子:
    由A村去B村的道路有3条,由B村去C村的道路有2条(如下图所示)。从A村经B村去C村,共有多少种不同的走法?

    △分析:从A村到B村有3种不同的走法,按这3种走法中的每一种走法到达B村后,再从B村到C村又有2种不同的走法。因此,从A村经B村去C村共有:3×2 = 6种不同的走法。

▲一般地,做一件事,完成它需要分成n个步骤,做完第一步有m1种不同的方法,做完第二步有m2种不同的方法,……,做第n步有m n种不同的方法。
那么,完成这件事共有:N = m1×m2×…×m n种不同的方法。

二、乘法原理:
  〖举例〗
    1. 书架上层放有6本不同的数学书,下层放有5本不同的语文书。
        ⑴从中任取一本,有多少种不同的取法?
        ⑵从中任取数学书与语文书各一本,有多少种不同的取法?
    解:⑴分析:从书架上任取一本书,有两类情况:第1类情况是从上层取数学书,可以从6本书中任取一本,有6种方法;第2类情况是从下层取语文书,可以从5本书中任取一本,有5种方法。
        根据加法原理,得到不同的取法的种数是: N = 6+5 = 11
      ⑵分析:从书架中任取数学书与语文书各一本,可以分成两个步骤:第1步取一本数学书,有6种方法;第2步取一本语文书,有5种方法。
        根据乘法原理,得到不同的取法的种数是:N = 6×5 = 30
    2. 由数字1,2,3,4,5可以组成多少个三位数(各位上的数字允许重复)?
    解:分析:要组成一个三位数可以分成三个步骤:          

          ①第1步确定百位上的数字,从5个数字中任选一个数字,共有5种选法;          
          ②第2步确定十位上的数字(由于数字允许重复)这儿仍有5种选法;          
          ③第3步确定个位上的数字,同理,它也有5种选法。
        根据乘法原理,得到可以组成的三位数的个数是:N = 5×5×5 = 5 3 = 125
  ▲不难发现,加法原理的要点是一个“类”字,乘法原理的要点是一个“步”字,即分“类”时用加法原理;分“步”时用乘法原理棗分清“类”与“步”是正确解题的关键。
  △练习:
      1.在读书活动中,一个学生要从2本科技书、2本政治书、3本文艺书里任选一本,共有多少种不同的选法?
      2.乘积(a1+a2+a3)(b1+b2+b3+b4)(c1+c2+c3+c4+c5)展开后共有多少项?
      3.如下图所示,从甲地到乙地有2条陆路可走,从乙地到丙地有3条陆路可走,又从甲地不经过乙地到丙地有2条水路可走。
        ⑴从甲地经乙地到丙地有多少种不同的走法?
        ⑵从甲地到丙地共有多少种不同的走法?
                              
 
 

                                                                        §2排列 

△让我们来看下面这个例子:

  由数字1,2,3,4可以组成多少个没有重复数字的三位数?
  △分析:这个问题就是从1,2,3,4这四个数中,每次取出三个,按照百位、十位、个位的顺序排列起来,求一共有多少种不同的排法。
    第一步:先确定百位上的数字,在1,2,3,4这四个数字中任取一个,有4种方法。
    第二步:确定十位上的数字。当百位上的数字确定以后,十位上的数字只能从余下的三个数字中去取,有3种方法。
    第三步:确定个位上的数字。当百位、十位上的数字都确定以后,个位上的数字只能从余下的两个数字中去取,有2种方法。
    根据乘法原理,可以组成4×3×2 = 24 个没有重复数字的三位数。
▲上面这个问题实质是从4个不同的元素(通常,将被取的对象叫做元素)中,任取3个,然后按一定的顺序排成一列,求一共有多少种不同的排法。
 
一般地说,从n个不同元素中,任取m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个不同元素中取出m 个元素的一个排列。
 
一、排列:
▲从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用图一所示符号表示。
〖举例〗从8个不同元素中取出5个元素的排列数图二所示符号表示 ,从7个不同元素中取出6个元素的排列数图三所示符号表示。
  图一     图二       图三  
二、排列数:
△让我们来看这样一个问题:求排列数P(2,n)。
  分析: ⑴先填第一个位置,可以从这n个元素中任选一个填空,有n种方法。
      ⑵再填第二个位置,可以从剩下的n-1个元素中任选一个填空,有n-1种方法。
    于是,根据乘法原理,得到排列数为 = n ( n-1)
    类似,排列数 = n ( n-1 ) ( n-2 )。
三、排列数公式:P(m,n)= n ( n-1 ) ( n-2 ) … ( n-m+1 )

  这里n,m∈N,并且m≤n。
  ▲自然数1到n的边乘积,叫做n的阶乘,用n !表示。
  △当m = n时,有P(m,n)= n • ( n-1 ) • ( n-2 ) … 3 • 2 • 1=n!  

n个不同元素全部取出的一个排列,叫做n个不同元素的一个全排列
  【举例】
    1、某段铁路上有12个车站,共需要准备多少种普通客票?
      解:△分析:因为每一张车票对应着2个车站的一个排列,因此需要准备的车票种数,就是从12个车站中任取2个的排列数。12×11=132 (种)
    2、某信号兵用红、黄、蓝三面旗从上到下挂在竖直的旗杆上表示信号,每次可以任挂一面、二面或三面,并且不同的顺序表示不同的信号,一共可以表示多少种不同的信号?
      解:△分析:如果把3面旗看成3个元素,则从3个元素里每次取出1个元素的一个排列,对应一种信号。
            根据加法原理,所求的信号种数是3+3×2+3×2×1=15(种)
    3、用0到9这十个数字,可以组成多少个没有重复数字的三位数?
        △分析:百位上的数字只能从除0以外的1到9这九个数字中任选一个;十位和个位上的数字,可以从余下的九个数字中任选两个。
            根据乘法原理,所求的三位数的个数是 9×9×8 = 648
  △练习:
    1.6名同学排成一排照相,有多少种排法?
    2.有5本不同的书,准备给3名同学,每人1本,共有多少种给法?
    3.一个火车站有8股岔道,停放4列不同的火车,有多少种不同的停放的方法(假定每股岔道只能停放一列火车)?
 
 
 
 
△让我们来看下面的例子:从5名学生中,选出2名去农村调查,有多少种选法?
  △分析:这个问题可以理解为从5个元素中任取2个,不管怎样的顺序并成一组,求一共有多少个不同的组(从5名学生中选出2名学生,被选出的2名学生中谁先被选出、谁后被选出与求解无关)——这是组合问题了。
 
▲一般地说,从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合。
一、组合:
  △从5个不同元素a,b,c,d,e中取出2个元素的排列与组合的关系如下所示
  组  合排  列
    a,b                a,b||b,a
    a,c                a,c||c,a
    a,d               a,d||d,a
    a,e               a,e||e,a
  ........................
  不难发现,排列与元素的顺序有关,组合与元素顺序无关。
  从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数,用符号C(m,n)【其中m在C左上方,n在C左下方】表示。
二、组合数公式:
  C(m,n)=P(m,n)/P(m,m)=n*(n-1)*....*(n-m+1)/(m!)
  又∵P(m,n)=n!/(n-m)!
  ∴C(m,n)=n!/[m!*(n-m)!]
 
 
    
  2.
 
    
    
进行一个补充:

巧用“捆绑”、“插空”、“分组”法解决排列组合题目

在求解排列组合问题时,经常遇到有关几个元素必须相邻、几个元素互不相邻、将n个元素分成m组的问题。现将此类问题的解法通过例题介绍如下。
  例1 由数字1、2、3、4、5、6、7组成无重复数字的七位数。(1)求三个偶数必相邻的七位数的个数;(2)求三个偶数互不相邻的七位数的个数。
    解 (1):因为三个偶数2、4、6必须相邻,所以要得到一个符合条件的七位数可以分为如下三步:第一步将1、3、5、7四个数字排好有P(4,4)种不同的排法;
        第二步将2、4、6三个数字“捆绑”在一起有P(3,3) 种不同的“捆绑”方法; 第三步将第二步“捆绑”的这个整体“插入”到第一步所排的四个不同数字的五个“间隙”(包括两端的两个位置)中的其中一个位置上,有P(1,5)种不同的“插入”方法。根据乘法原理共有P(4,4)*P(3,3)*P(5,1)=720种不同的排法。所以共有720个符合条件的七位数。
    解(2):因为三个偶数2、4、6 互不相邻,所以要得到符合条件的七位数可以分为如下两步:第一步将1、3、5、7四个数字排好,有P(4,4) 种不同的排法;
        第二步将2、4、6分别“插入”到第一步排的四个数字的五个“间隙”(包括两端的两个位置)中的三个位置上,有P(3,5) 种“插入”方法。根据乘法原理共有P(4,4)*P(3,5)=1440种不同的排法。所以共有1440个符合条件的七位数。
  例2 将A、B、C、D、E、F分成三组,共有多少种不同的分法?
    解:要将A、B、C、D、E、F分成三组,可以分为三类办法:(1-1-4)分法、(1-2-3)分法、(2-2-2)分法。下面分别计算每一类的方法数:
        第一类(1-1-4)分法,这是一类整体不等分局部等分的问题,可以采用两种解法。解法一:从六个元素中取出四个不同的元素构成一个组,余下的两个元素各作为一个组,有C(4,6)种不同的分法。
    解法二:从六个元素中先取出一个元素作为一个组有C(1,6) 种选法,再从余下的五个元素中取出一个元素作为一个组有C(1,5) 种选法,最后余下的四个元素自然作为一个组,由于第一步和第二步各选取出一个元素分别作为一个组有先后之分,产生了重复计算,应除以P(2,2)。所以共有C(1,6)*C(1,5)/P(2,2) =15种不同的分组方法。
        第二类(1-2-3)分法,这是一类整体和局部均不等分的问题,首先从六个不同的元素中选取出一个元素作为一个组有C(1,6) 种不同的选法,再从余下的五个不同元素中选取出两个不同的元素作为一个组有C(2,5) 种不同的选法,余下的最后三个元素自然作为一个组,根据乘法原理共有C(1,6)*C(2,5)=60种不同的分组方法。
        第三类(2-2-2)分法,这是一类整体“等分”的问题,首先从六个不同元素中选取出两个不同元素作为一个组有C(2,6) 种不同的取法,再从余下的四个元素中取出两个不同的元素作为一个组有C(2,4)种不同的取法,最后余下的两个元素自然作为一个组。由于三组等分存在先后选取的不同的顺序,所以应除以P(3,3) ,因此共有C(2,6)*C(2,4)/P(3,3) =15种不同的分组方法。
根据加法原理,将A、B、C、D、E、F六个元素分成三组共有:15+60+15=90种不同的方法。
  例3 一排九个坐位有六个人坐,若每个空位两边都坐有人,共有多少种不同的坐法?
    解:九个坐位六个人坐,空了三个坐位,每个空位两边都有人,等价于三个空位互不相邻,可以看做将六个人先依次坐好有P(6,6)种不同的坐法,再将三个空坐位“插入”到坐好的六个人之间的五个“间隙”(不包括两端)之中的三个不同的位置上有C(3,5)种不同的“插入”方法。根据乘法原理共有P(6,6)*C(3,5)=7200种不同的坐法。

小结:(1)m个不同的元素必须相邻,有P(m,m) 种“捆绑”方法。
(2)m个不同元素互不相邻,分别“插入”到n个“间隙”中的m个位置有 P(m,n)种不同的“插入”方法。
(3)m个相同的元素互不相邻,分别“插入”到n个“间隙”中的m个位置,有C(m,n)种不同的“插入”方法。
(4)若干个不同的元素“等分”为 m个组,要将选取出每一个组的组合数的乘积除以P(m,m)。

希望这篇博文对您有所帮助!!

OI内的排列与组合(简单版)的更多相关文章

  1. 【组合数学】OI内的排列与组合(简单版)

    §1基本原理 △让我们来看下面问题: 从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船.一天中,火车有4班,汽车有2班,轮船有3班.那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?△分 ...

  2. Lucene.net站内搜索—3、最简单搜索引擎代码

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  3. 字符串数组元素排列与组合的Java递归实现

      我们在笔试面试过程中经常会遇到关于排列与组合的问题,其实这些可以通过递归简单的实现,看下面两个例子: (1)关于字符串排列的问题 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串ab ...

  4. 排列与组合的C语言实现

    排列与组合是数学里的经典问题,由这个问题可引申出子集.字典排序等问题,那么,我们先看经典的排列与组合,怎么在程序里实现. 在网上搜了一下,关注这个问题的人还是挺多的,有不了人给出的回答是使用几个for ...

  5. 模板】AC自动机(简单版)

    模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P3808 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保 ...

  6. 动手写一个简单版的谷歌TPU-矩阵乘法和卷积

    谷歌TPU是一个设计良好的矩阵计算加速单元,可以很好的加速神经网络的计算.本系列文章将利用公开的TPU V1相关资料,对其进行一定的简化.推测和修改,来实际编写一个简单版本的谷歌TPU.计划实现到行为 ...

  7. JavaMail简单版实验测试

    前言: 最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理.现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试! 1.载入 ...

  8. 小米抢购(简单版v0.1)-登录并验证抢购权限,以及获取真实抢购地址

    小米(简单版)-登录并验证抢购权限,以及获取真实抢购地址! 并不是复制到浏览器就行了的   还得传递所需要的参数 这里只是前部分  后面的自己发挥了 { "stime": 1389 ...

  9. dfs 生成排列和组合

    利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...

随机推荐

  1. JSP/Servlet Web 学习笔记 DaySix —— EL表达式

    1)EL从scope中得到参数时可以自动转换类型,因此对于类型转换的限制更加宽松. 2)使用EL表达式,可以简化变量和对象的访问. 3)EL表达式必须以 ${XXXX} 来表示. 4)EL提供点(.) ...

  2. (转)导出EXCEL时科学计数法问题

    //1)  文本:vnd.ms-excel.numberformat:@ //2)  日期:vnd.ms-excel.numberformat:yyyy/mm/dd //3)  数字:vnd.ms-e ...

  3. NN-Neural Network

    开始学习神经网络(Neural Network) 已有线性与逻辑回归,为什么需要用到NN 实际的应用中,需要根据很多特征进行训练分类器,当今有两个特征下,可以通过下图表述: 然而还有太多的特征需要考虑 ...

  4. ex2:逻辑回归及正则条件下的练习

    EX2 逻辑回归练习 ​ 假设你是一个大学某系的管理员,你想根据两项考试结果来确定每个申请人的录取机会.你有以前申请人的历史资料以作为逻辑回归的训练集.对于每一个训练集,你拥有每个申请人的两项考试的分 ...

  5. 如何使用 ui-router-extras

    为了使用ui-router创建tabs构架,使用ui-router-extras 使用方法: 0. 安装包 bower install ui-router-extras --save-dev 1. 引 ...

  6. fpm 制作 rpm 包

    支持的 源类型包 ① dir : 将目录打包成所需要的类型, 可用于源码编译安装软件包 ② rpm : 对 rpm 包进行转换 ③ gem : 对 rubygem 包进行转换 ④ python : 将 ...

  7. 通过 itms:services://? 在线安装ipa ,跨过app-store

    1.需要一个html文件,引导下载用户在线安装ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&quo ...

  8. 关于MATLAB处理大数据坐标文件2017526

    运行六个特征,提高了3分,也就是说以前做的特征已经用完了,穷途末路,依靠以前的特征已经很难取得进步了,提出以下建议 1.测试集曾经运行错误的数据尽早画出图形,并尽可能发现问题并提出特征 2.运行其他程 ...

  9. MySQL,Oracle,PostgreSQL通过web方式管理维护, 提高开发及运维效率

    在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询 ...

  10. java.toString() ,(String),String.valueOf的区别

    在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结. 常用的方法有Object#toString(),(String)要转换的对象,S ...