zoukankan      html  css  js  c++  java
  • 2017.3.7 组合数学学习——四个基本计数原理、排列

    加法原理:
    互相排斥的情况
    划分少量且易处理
    如果有p中方法能从一堆中选出一个物体,又有q中方法能从另一堆中选出一个物体,那么从这两堆中选出一个物体有p+q种方法
    乘法原理:
    对于集合S有p个a,每个a对应着q个b,那么|S|=p*q
    使用条件:各任务间没有依赖情况
    优先选择约束性最强的选择
    除法原理:
    条件:划分子集合大小相等
    集合的排列:
    定理:对于正整数n和r,r<=n
    有P(n,r)=n*(n-1)*(n-r+1)=n!/(n-r)!
    注:约定0!=1
    例:将n个不同的数排序,使其中m个不同的数不能相邻,问方案数
    解:①对于没有要求的n-m个数,有p(n-m,n-m)种排法
    ②对于不能相邻的数,他们只能出现在第①类数的前面、后面和空位上,所以有p(n-m+1,m)种排法
    根据乘法原理,ans=p(n-m,n-m)*p(n-m+1,m)
    线性排列:
    例:从1——9中取7个数构成一个排列,要求5、6不相邻,求方案数
    解法一,加法原理:
    将答案分为4部分:
    1、 取得数没有5和6,s1=p(7,7)
    2、取得数有5没有6,s2=7*p(7,6)
    3、取得数有6没有5,同2
    4、取得数既有5又有6
    再分为3种情况
    ① 若5在第一个,那么6有5种放法,反过来同理 s3=2*5*p(7,5)
    ② 若5在最后一个,同①
    ③ 若5在中间,那么5有5种放法,6有4种放法,反过来同理 s4=2*5*4*p(7,5)
    ans=s1+s2*2+s3*2+s4
    解法二,减法原理:
    答案=所有的排列-5、6相邻的排列
    1、所有的排列s1=p(9,7)
    2、5 6相邻的排列,有6种放法5后面是6,反过来一样 s2=2*6*p(7,5)
    ans=s1-s2
    循环排列:
    定理:n元素集合的循序r排列数目=p(n,r)/r
    因为每个线性r排列可以看做r个循环r排列
    特别地:n元素的循环排列为(n-1)!
    可以把一个元素固定,那么剩下的n-1个元素就是一个线性排列
    例1:10个围坐一圆桌,两人不愿意挨着,求座位设置方法
    解法一:减法原理
    两人挨着:将两人看做一个整体,插8个人的空
    ans=所有排列-两人挨着的排列
    =9!-2*8!=7*8!
    解法二:
    设a1、a2不愿意挨着,固定a1,那么a1左边有有8个人可以坐,右边有7个人可做,中间7个人随便坐,所以ans=8*7*7!=7*8!
    例2:20个念珠串成一个项链,能做多少种不同的项链
    解:项链数目:19!
    项链反转过来,念珠排放不改变,所以ans=19!/2
    此题与朴素循环排列的不同之处:
    A 与 A 是不同的循环排列
    B C C B
    但是同一种项链,因为前者翻转过来就是后者

  • 相关阅读:
    SpringMVC-初学习
    Mybatis-随笔
    Mybatis-逆向工程generator
    Mybatis-动态sql和模糊查询
    Mybatis-resultMap的一些用法(映射,关联查询)
    Mybatis基本的CRUD
    Spring框架(一)
    restful风格以及异常处理。
    SpringMVC后台校验
    Spring添加文件
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6517704.html
Copyright © 2011-2022 走看看