在给定限制的情况下生成集合的所有子集

时间:2014-03-06 05:36:55

标签: c algorithm recursion

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

此外,如果我有100个子集,例如S,则所有子集的存储都会成为问题。我的程序进行迭代,每次迭代我只需要操作每个集合中的一个子集。我是否有办法在步骤中生成集合的子集而不是一次性生成集合的子集?即每次我拨打下一​​个(S)时,我都会得到一个新的子集。

注意我在 C 编码。

1 个答案:

答案 0 :(得分:2)

您的“限制”等于以下

  • 删除必须出现在最终集中的 S 中的所有元素。调用剩余的 S` 集和已删除的元素 B
  • 制作 S` 的powerset,将 B 与每个项目的联合添加到所需元素中。

powerset是标准的递归函数,超出了您的问题范围。实际上,有许多关于如何在Stack Overflow上执行此操作的示例。