排列组合学习要点

 

一、语言习惯的问题

排列和组合的差别是,排列的元素与位置有关,而组合的元素对位置无要求。我们的日常问题绝对不会出现这样的问法:某组元素的排列数是什么?

不管是排列还是组合,日常用语都会用“组合”这个词,因此我们要分析一个问题是排列还是组合,要基于问题的前提,分析元素的位置是不是问题需要考虑的因素,如果元素位置不是问题所关心的,那么这个就是组合,否则就是排列。

为了顾及语言上的误导性,一般专业的数学题都不会在涉及排列的时候出现“组合”二字,因为“排列”或者“组合”都是经过数学严格定义的术语。这造成学生只能针对数学问题做解答,而对于没有用语暗示的现实问题,往往就缺乏分析能力。

 

二、 排列的两种方法

分类法:根据不同情况分析每一种情况的种类个数,然后累加所有情况,自然就是问题的解。每一种情况必须是独立的,不相互涵盖的,所有分类的总和必须是问题的全部情况。

分步法:分步法基于分类法的思想,分析每一种情况,但是每一种情况由几个独立部分相继组成。

假设一种情况有两步,第一步有三种选择,第二步有两种选择,那么总共的可能路线就有3*2种。第二种情况有一步,第一步有五种选择,那么就是五种路线。结合一起就是3*2+5=11种。分类法是一个步骤的分步法,是特殊情况。分步法的每一步都是分类法,是分类问题多次组合。

分类法是研究一个分步种的分类情况,也就是一步中的所有情况都应该相互独立,并且总的分类应该是所有可能的情况。 简而言之的要求是独立而全面。

而分步法是研究一个完整的路线所需要的步骤,步骤之间应该独立,连续有次序,并是解决问题的一个情况的完整路线。简而言之就是要求连续而完整。

如果把一个问题的解集表述成一个表格,分类研究的是每一列的情况,而分步研究的是每一行的情况。当然,每一步的分类个数未必是相同的,每一分类的步骤数也未必是相同的。

 

三、元素

问题经常会罗列元素,但是会添加一定的条件约束。

元素的一般含义就是分类,即每一种类,每一情况。而条件约束实际上是要求你重新划分种类。 因此不能光被问题所罗列的元素迷惑了,根据条件约束用分类法重新定义元素的个数。

 

四、位置

问题经常会让你把元素按照位置排列,每一个位置其实就是一个步骤。每个步骤需要考虑的元素总数一般是不相同的。

位置比元素更有迷惑性,因为位置可能是隐含的,不会直接告诉你总共有几个位置,需要你自己分析出来。

 

五、局部和整体

分类的局部是累加为整体。

分步的局部是类乘为整体。

 

六、理解排列数和组合数

(一)基础

n个元素取m个元素

排列数:第一步取一个,可以有n个可选;第二步取一个,可以有n-1个可选(因为上一步取走了一个);总共有m步,那么就是A(m,n) = n(n-1)(n-2)(n-3)...= n!/(n-m)!  。 m是取的个数, n-m就是要去除的个数(用除法去除),如果m=n,那就是全排列。

组合数:在排列数的基础上,去除顺序相同的部分。顺序相同的部分怎么知道? A(m,n) 的结果就是取m组元素(每组个数不一样),然后进行全排列,也就是m!,那么我们想知道没有排列之前的情况,也就是无重复的组合数就是C(m,n) = A(m,n)/m! = n!/( (n-m)!*m! ).

排列数转化为组合数只需要除以m! ,反之组合数要转换为排列数就是乘以m!,可见m!就是排序因子,可以帮助我们随意转换。

 

(二)平均分堆问题:

n个元素,平均分m堆,每堆k个

每一堆为一步,而每一堆的每一个位置又是一小步。

从元素列表中取k个元素的m堆,也就是 A(m, X),其中X 未知,解法是:

首先第一堆是 A(k,n),而第二堆问题是 A(k,n-k) ,第二个问题可以选择的元素就要少k了,因此第m堆等于A(k,n-(m-1)k).

A(k,n)A(k,n-k)A(k,n-2k)...A(k,n-(m-1)k) 就是所有的排列数。

 

而平均分堆需要知道的是组合数,那么就是C(m,x) = A(m,x) /m!:

然后每一堆都要求得它对应的组合数。

第一堆的组合是C(k,n) = A(k,n)/k! ,第二堆 C(k,n-k) = A(k,n-k)/k!...C(K,n-(m-1)k) = A(k,n-(m-1)k)/k!

累乘之后就是C(k,n)...C(k,n-(m-1)k) 对应公式A(m,x) 部分;

最后套最终公式就是c(m,x) = A(m,x) /m! = ( C(k,n)...C(k,n-(m-1)k) ) / m! .

每一堆自身需要求对应的组合数,而所有堆的结果也要除以m! 取得对应的组合数。

组合数的公式都是基于排列数得到的,而排列数的公式是有逻辑基础,易于掌握的(也就是从n个元素取m个数的机械操作),因此应该首先找出对应的排列数,再根据公式推导得到对应的组合数。

有时候不知道元素个数也无所谓的,只需要知道取数个数,就能转换组合数和排列数。

 

有些问题需要得到平均分堆组合数后,又提出新的要求,那就是按顺序分配。这个等价于:组合数为元素个数n,取位置数m的排列数问题。

非平均分堆问题,而是按特定比例分配,如:2:2:3:3:5 这个比例分配,m! 的值应该如何取?

这个需要结合分类法,因为比例不同的分组总是不同的组合,而比例相等的组合有不同的排列(相同比例的元素可以相互替换,得到组成结构不变但是内部顺序变化的新排列)。

把元素组合分为3类,一类是2,一类是3,一类是5。其中类2的数目是2,也就是m1 = 2;以此类推,m2= 2,m3 = 1。

问题可以转化为,先求类2的情况:c (2,x)  /m1, 然后求类3:c(3,x)/m2, 类5 : c(5,x)/m3.

综合: m! = m1! * m2! * m3!

(三)插空法:

插空法是首先建立一般队列,然后插入特殊元素的方法。首先是需要建立一个合理的分类,将一般和特殊元素进行分组。

如7个元素,5个无约束,2个不允许相邻。

5个元素可以自由排列,但是2个应该分开,第一步建立好任意排列的5个元素后,再插入2个元素,5个元素的队列可以选择插入6个位置,并且第一个插入和第二个插入的位置是相互独立的,相当于6个元素放在两个位置上,也就是A(2,6)。

总结: A(5,5) * A(2,6).

分组元素需要考虑完整性,把7个元素分成5个和2个两组,但是问题是求7个元素的排列,那么这两组的关系应该是“分步法”。第二是需要考虑元素的一般性,不要用特殊情况去分析一般性的元素排列,5个一般元素的组成的某一个特殊排列,都能代表这5个元素的一般性排列,因为两个特殊元素考虑的是双方的关系,和5个一般元素无关。如果把其中一个特殊元素并入5个一般元素去考虑,那么就无法插入第7个元素,因为任意一个位置上的数都可能就是特殊元素。通过建立合理的模型,就可以将两类元素进行正确的分步法。这也是独立性思想的一个例子,分类分组都必须要考虑到元素的独立性,建立一个不相互干涉的分类和分步。

(四)捆绑法

捆绑法是将特殊元素捆绑成一个独立元素,和一般元素进行排列。

如7个元素,5个无约束,2个必须相邻。

首先分成两组,5个无约束一组,2个特殊一组,第二组可以作为一个整体插入到五个元素的任意位置,也就是可以类似插空法那样 A(2,2)*A(1,6)*A(5,5) ;也可以把2个元素形成一个一般元素后,组成6个一般元素的解,A(2,2)*A(6*6) 。

(五)消序法

消序法一般是去除一部分的有序,因此先求的总体的排列数,然后除以局部的排列数,就可以得到最后要的结果。如果是整体消序就是排列数和组合数之间的转换。

如7个元素,5个无约束,剩下两个的甲必须在乙左边。

消序法是A(7,7) / A(2,2).

消序法的方式很简单,但是难以理解,需要结合组合数的基础知识。

消序法和分堆的思想有共通的地方,可以把需要消序的和不需要消序的分成两堆,然后得到C(2,7)*A(5*5).

(六)剪截法

如7个元素,任意分成3组,每组至少一个,有几种组合?

相当于7个元素的队列的间隔内(6个中间间隔),任意截断2次,即C(2,6) = 21.

这种问题本质上也是基础问题,只是需要做思维转换。

(七)

 

posted @ 2012-02-25 12:11  诺贝尔  阅读(4467)  评论(0编辑  收藏  举报