组合数学

2.3.1两个基本计数原理

1.加法原理

先看一个简单的例子:从杭州到北京,可以坐火车,也可以乘飞机,每天火车有5趟,飞机有8次航班,那么从杭州到北京有多少种不同的走法?

很显然,从杭州到北京,乘飞机有8种走法,坐火车有5种走法,所以共有13种走法。

加法原理:设完成某一件事,有n类方法,并且在第一类中有m1种方法;在第二类方法中有m2种方法;……;在第n类方法中有mn种方法。则完成这件事情共有N=m1+m2+…+mn种不同的方法。

加法原理有下列特性:

①方法间的相互独立性。即每一种方法都可以独立完成给定的事件;

②方法间的不相容性。即在完成给定的事件的几类方法中,每次只需要在其中选用一种。所以加法原理又叫分类法。

7如果直角三角形的边长均小于10,且可以表示为:

m2+n2,m2-n2,2mn(m>n≥1,m,n∈N*),问有多少个这样的直角三角形?

算法分析

由已知得m2+n2<100,所以m≤9。

当m=2时,n=1;

当m=3时,n=1,2;

当m=4时,n=1,2,3;

当m=5时,n=1,2,3,4;

当m=6时,n=1,2,3,4,5;

当m=7时,n=1,2,3,4,5,6;

当m=8时,n=1,2,3,4,5;

 

当m=9时,n=1,2,3,4;

所以共有不同的满足条件的直角三角形种数为:1+2+3+4+5+6+5+4=30。

如果用程序来实现的话可以采用枚举法。

参考程序

var m,n,a,b,c,k:integer;

begin

  for m:=2 to 9 do

for n:=1 to m do

  begin

    a:=m*m-n*n;

    b:=2*m*n;

    c:=m*m+n*n;

    if (c<100) and (a>0) then begin

                                writeln(m,′ ′,n);

                                k:=k+1;

                              end;

  end;

writeln(k);

  end.

2.乘法原理

乘法原理:设完成某一件事,需要分n步,并且在第一步中有m1种方法;在第二步中有m2种方法;……;在第n步中有mn种方法。则完成这件事情共有N=m1×m2×…×mn种不同的方法。

乘法原理有下列特性:

①步骤间的相互依赖性。即每一步不能完成给定的事件,必须依次完成每一步,格可以完成整个事件。

②每一步里方法间的独立性。即在每一步的各种方法中,只需要在其中选用一种,就可完成这个步骤。所以乘法原理又叫分步法。

例8  用数字0,1,2,3能组成多少个三位数?

算法分析

第一步,确定百位上的数字,只能在1,2,3这三个数字中任取一个,有三种方法。

第二步,确定十位上的数字,可以在0,1,2,3这四个数字中任取一个,有四种方法。

第三步,确定个位上的数字,可以在0,1,2,3这四个数字中任取一个,有四种方法。

共有3×4×4=48种方法。

如果用程序来实现的话可以采用枚举法。

参考程序

var a,b,c:integer;

begin

  for a:=1 to 3 do

for b:=0 to 3 do

  for c:=0 to 3 do

    begin

      writeln(a,b,c);

      k:=k+1;

    end;

     writeln(k);

end.

2.3.2排列

⑴定义

集合A中的一个排列就是A中元素的一个有序选出。如果两个排列满足下列条件之一,就被认为是不同的排列:

①所含元素不全相同;

②所含元素相同,但排列顺序不同。

⑵相异元素不重复的排列

定义:设从n个元素中,取出m个不同元素,按照一定顺序排成一列:当m<n时,叫作从n个不同元素中,取出m个不同元素的一种选排列;当m=n时,叫作n个不同的元素的全排列。

例如,从a,b,c,d四个元素中任取三个的所有排列。由乘法原理共有24种方法。

定理:从n个不的元素中,取出m个不同元素的选排列数记为,则

=n(n-1)…(n-m+1)。

n个不同的元素的全排列数记为,则=n(n-1)…3·2·1或=n!。

排列公式可以写成=。

例9 N的全排列的算法。

参考程序

const max=10;

type numb=1..max;

     pera=array[0..max] of integer;

     settype=set of numb;

var sele,num,count:integer;

    total:settype;result:pera;

procedure nextone(total:settype;num:numb;sele:integer;var result:pera);

forward;{ 欲声明一个过程或函数,而且只给出它的名字和参数,不列出其实现代码,需要在句尾加forward 关键字}

procedrue permutate(total:settype;num:numb;sele:integer;var result:pera;var count:integer);

  var i:integer;

  begin

    if sele=num then begin

                       for i:=0 to sele-1 do

                         write(result[i],′ ′);

                          count:=count+`1;

                       writeln;

                      end

                   else  nextone(total,num,sele,result)

  end;

procedure nextone(total:settype;num:numb;sele:integer;var result:pera);

;

  var i:integer;

  begin

    for i:=1 to num do

      if i in total then begin

                           result[sele]:=i

                           permutate(total-[i],num,sele+1,result)

                          end

  end;

begin

  write(‘input number(1-10):’);

  read(num);

  if (num>max) or (num<1)

    then writeln(‘input error!’)

    else begin

           sele:=0;

           count:=0;

           total:=[1..num];

           permutate(total,num,sele,result;count);

           writeln(‘total order number:’,count);

         end

  end.

⑶其他类型的排列

①重复排列:从n个不同的元素中,可以重复地取出m个元素的排列叫作相异元素可重复选排列,其排列数为nm。

例10 从1,2,3,4,5五个数字中任取三个组成三位数,有多少个这样的三位数?

解 由于可以重复选择,则此排列数列数共有53=125个三位数。

②不全相异元素的全排列:如果在n个元素中,有n1个元素彼此相同,有n2个元素彼此相同,……,又有nm个元素彼此相同,并且n1+n2+…+nm=n,则这n个元素的全排列叫作不全相异元素的全排列,其排列数为:     

                            

    

如果n1+n2+…+nm=r<n,则这r个元素的选排列叫作不全相异元素的选排列,其排列数为

 

 

 

 

 

11 把两个红球,一个篮球和一个白球放到10个编号不同的盒子中去,有多少种放法?

解 n=10,r =4,n1=2,n2=1,n3=1,方法总数为

 

 

 

③圆排列:n个不同元素不分首尾围成一个圆圈达到圆排列。其排列为:=(n-1)!

例12 有男女各5人,其中有3对是夫妻,沿圆桌就座,若每对夫妻都坐在相邻的位置,问有多少种坐法?

解  设3对夫妻分别为A和a,B和b,C和c,先让A,B,C三人和另外四人围圆桌就座的方法为7!/7种;又对上述坐法,a可以坐在A的左、右两侧,故有2种方法,b、c也一样。所以共有7!/7×2×2×2=5760种坐法.

2.3.3 组合

⑴定义

集合A中的一个组合就是A中元素的一个无序选出。

在某类集合中所有不同组合的个数叫做组合数。

⑵相异元素不重复的组合

定义:设从n个不同的元素中,取出m(m≤n)个不同元素,不考虑顺序并成一组,叫做从n个不同元素中,取出m个不同元素的一个组合。

例如从a,b,c,d四个元素中任选3个元素的所有组合是:abc,abd,acd,bcd。

定理:从n个不同的元素中,取出m个不同元素的组合数记作,则有===,规定=1。

例如,==56。

组合数的性质:定理=,=+。

例如:===4050。

⑶相异元素的重复组合

定义:设从n个不同的元素中,取出m(m≤n)个不同元素,若允许这m个元素可以重复使用,也允许m>n,则把这样的组合成为重复组合,其组合数记为:

=。

例13 把3个相同的球放到4个不同的盒子,有多少种方法?

解 这是允许重复组合的典型模型,用0表示球,用1划分出盒子。

例如

 

表示一种放法:第一个盒子有1个球,第二个

 

盒子没有球,第三个盒子有二个球,第四个盒子没有球。问题转化为:将n+1个1 和r个0排列,求使得每个排列两端都是1的放法总数。所以                  ==20。

上述问题的一般化形式:把r个球放到n个编号不同的盒子,每个盒子里球的个数不限,放法总数是:。如果用表示第I个盒子里所放的球的个数,则++…+=r。

不同的放法对应了上述方程的不同的解。所求的放法种数就是该不定方程的所有非负整数解的组数。

 

2.3.4 常用计数原则

1.对应原则

如果存在集合S到易于计数的集合S1的一一对应,那么集合S1的元素个数,即‖S‖=‖S1‖。

应用对应原则求‖S‖,关键在于寻找一个既能于集合S建立一一对应关系,又便于计数的集合S1。因此,它实质上是一种转换法,把求‖S‖的问题转换为求‖S1‖的问题。

例14 有一个边长为为3 dm 的立方体,将其表面涂色。问:

① 至少要锯几次才能把它分成边长为1dm的小立方体?

② 所得到的小立方体有几个?

③ 所得到的小立方体中三面有颜色的有几个?

④ 所得到的小立方体中二面有颜色的有几个?

⑤ 所得到的小立方体中一面有颜色的有几个?

⑥ 所得到的小立方体中没有颜色的有几个?

   解  如果将原立方体横、纵、竖各锯两次,可以锯成27个边长为1dm的小立方体。

   原立方体中心的边长为1dm的小立方体有6个面与锯6次一一对应,所以至少要锯6次。所得到的小立方体有27个。

   三面有色的小立方体有8个,因为只有从顶点处切下的小立方体的三面有色,而原立方体的顶点有8个。

   两面有色的小立方体有12个,因为只有从棱中间切下的小立方体的两面有色,而原立方体的棱有12条。

   一面有色的小立方体有6个,因为只有从各面中心切下的小立方体的一面有色,而原立方体的面有6个。

   没有颜色的小立方体有1个,因为只有从原立方体中心切下的小立方体是没有颜色的。

2.抽屉原理

 有些时候,不需要求出满足某些特定条件的对象一共有多少个,而是需要判断某些特定条件的对象是否存在。例如,有两个木箱,现在给你三个球,

 让你把这三个球放到木箱里,你怎么放呢?一个木箱放两个球,另一个木箱放一个球,或者三个球都放在一个木箱里。不管怎样放,至少有一个箱 子里放着两个或两个以上的球。这里应用了一个很重要的原理——抽屉原理。

 抽屉原理:如果把n+1件东西放入n个抽屉,则至少有一个抽屉里放着两件东西。例如,13个人一起走路,至少有两个人的生日在同一个月等。

   3.容斥原理

设集合A是集合S的一个子集,Ā表示不属于A而属于S的集合,称为补集。用‖A‖表示集合A的元素个数,则‖A‖=‖S‖-‖Ā‖。

例如,求1到200之间能不能被23整除的整数个数?

解 ‖Ā‖=200/23=8,‖A‖=200-8=192。

上述原理可推广至一般性。

定理  设p1,p2是两个不同的性质,集合S中的任何一个元素可能具有这些性质之一或全部。令S的子集Ai元素具有性质pi(i=1,2)。  则A1∩A2就是S中的同时具有性质p1,p2的元素所组成的集合;Ā1∩Ā2 而就是S中的既不具有性质p1 ,又不具有性质p2 的元素所组成的子集。

所以:

‖Ā1 ∩Ā2‖=‖S‖-‖A1‖-‖A2‖+‖A1∩A2‖.

 

 

转载于:https://www.cnblogs.com/lj_cherish/archive/2010/10/11/1848245.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值