2014-03-06 50 views
1

假设我们有一组N个项目,S = {t1,t2,t3}。鉴于t1必须出现在每个集合中的限制,我想要产生所有可能的S子集。因此,S的所有可能的子集是{t1},{t1,t2},{t1,t3}和{t1,t2,t3}。我如何编写一个递归函数,它需要两组{t1}和{t2,t3}并返回上面列出的子集。生成集合的所有子集限制

此外,如果我有像S的100个子集,所有子集的存储成为一个问题。我的程序进行迭代,并且在每次迭代中,我只需要操作每个集合中的一个子集。有没有我的方式,我可以一步步生成一组集合的子集,而不是一次完成?即每次我呼叫下一个(S)时,我都会得到一个新的子集。

说明我正在编码C

+2

“我用C编码” - 我看不到。你到目前为止有什么? – WhozCraig

+2

我正在投票结束,但搜索“C权力集”。您正在构建“功率集”的子集。给定一个限制,你不需要对永远不会限定的子集进行递归调用。例如:http://rosettacode.org/wiki/Power_set#C –

+0

我有一个迭代函数,首先产生最小的一组项目,即{t1}。给定{t1}它会产生所有大小为2的集合,即{t1,t2}和{t1,t3}。最后,它只产生{t1,t2,t3}的超集。 – NewToAndroid

回答

2

你的“限购”金额以下

  • 取下小号必须出现在最终将所有的元素。拨打剩余的电话S'和删除的元素B
  • 产生S`服用联合与每个项目中所需的元素添加幂。

powerset是一个标准递归函数,并且超出了您的问题范围。确实,Stack Overflow有很多例子。