您的位置:首页 > 编程语言

算法:集合的划分原理及代码实现

2017-03-15 14:50 267 查看
在大学的离散数学中,会有关于划分原理的介绍。

基本概念

划分的概念就是把一个集合A分成若干个子集a1、a2…的过程,但是必须满足下列条件:

1.a1∪a2∪….∪an = A

2.对于所有i、j 属于0到n, ai∩aj = 空集。

3.a1…an 不为空集

例如

集合A = {1}的划分只有一种情况:{1}

集合A = {1,2}的划分有以下两种情况,分别是{1}{2},{1、2}

集合A = {1, 2, 3}的划分有五种情况:①{1}{2}{3};②{1}{2、3};③{2}{1、3};④{3}{1、2};⑤{1、2、3}

以此类推……

计算

那么就会出现一个问题,一个含有n个元素的集合的划分有多少种呢?

B1、B2 …. Bn分别表示从1到n个元素的集合的划分的个数,而有上述可知B1= 1,B2 = 2,B3 = 5,且令B0=1。

对一般的n有递推公式:

Bn+1=C(n,0)B0+C(n,1)B1+.+C(n,n)Bn,

C(n,k)是n元素取k个元素的组合数

公式可以这么理解:

n个元素的有Bn个分法,那么n+1个时,多加的这个设为t,

1.把t单独拿出来,剩下的有Bn种分法。即C(n,n)Bn。

2.t和其他元素当成一个整体,这其他元素可以是一个两个三个….

当是一个的时候:则有C(n,n-1)种抽取这一个元素的抽法,而剩下的只有n-1个了,所以是C(n,n-1)Bn-1

当是一个的时候:则有C(n,n-1)种抽取这一个元素的可能,而剩下的只有n-1个了,所以是C(n,n-1)Bn-1

以此类推….

当是n个的时候:则有C(n,0)种抽取这一个元素的可能,而剩下的只有0个了,所以是C(n,n-1)B0

全部累加则为Bn+1=C(n,0)B0+C(n,1)B1+.+C(n,n)Bn

代码实现待续….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 集合 递归