【问题描述】
设S是一个具有n个元素的集合,S={a1, a2, …, an},现将S划分成k个满足下列条件的子集合S1,S2,…,Sk,且满足:
(1)Si ≠ ф;
(2)Si ∩ Sj = ф; (1<=i, j<=k i≠j)
(3)S1 ∪ S2 ∪ S3 ∪…∪ SK = S
则称S1,S2,…,Sk是集合S的一个划分。它相当于把S集合中的n个元素a1, a2, …, an放入k个(0<k<=n<30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1, a2, …, an放入k个无标号盒子中去的划分数S(n,k)。
【输入数据】
10 6
【输出数据】
22827
【算法分析】
先举个例子,设S={1,2,3,4},k=3,不难得出S有6种不同的划分方案,即划分数S(4,3)=6,具体方案为:
{1,2}∪{3}∪{4} {1,3}∪{2}∪{4} {1,4}∪{2}∪{3}
{2,3}∪{1}∪{4} {2,4}∪{1}∪{3} {3,4}∪{1}∪{2}
考虑一般情况,对于任意的含有n个元素a1, a2, …, an的集合S,放入k个无标号的盒子中去,划分数为S(n,k),我们很难凭直觉和经验计算划分数和枚举划分的所有方案,必须归纳出问题的本质。其实对于任一个元素an,则必然出现以下两种情况:
【例5】集合的划分
最新推荐文章于 2023-06-18 23:18:58 发布