c++ - 查找集合的所有子集

标签 c++ algorithm math subset

我需要一种算法来查找集合中元素数为 n 的所有子集。

S={1,2,3,4...n}

编辑:到目前为止,我无法理解所提供的答案。我想逐步解释答案如何找到子集。

例如,

S={1,2,3,4,5}

你怎么知道 {1}{1,2} 是子集?

有人可以帮我用 C++ 中的一个简单函数来查找 {1,2,3,4,5} 的子集

最佳答案

递归地执行此操作非常简单。基本思想是,对于每个元素,子集的集合可以平均分为包含该元素的子集和不包含该元素的子集,否则这两个集合是相等的。

  • 对于 n=1,子集的集合是 {{}, {1}}
  • 对于 n>1,找到 1,...,n-1 的子集的集合,并复制它的两个拷贝。对于其中一个,将 n 添加到每个子集。然后取两个拷贝的并集。

编辑使其一目了然:

  • {1} 的子集是 {{}, {1}}
  • 对于 {1, 2},取 {{}, {1}},每个子集加 2 得到 {{2}, {1, 2}} 并取与 {{}, {1} 的并集} 得到 {{}, {1}, {2}, {1, 2}}
  • 重复直到达到 n

关于c++ - 查找集合的所有子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/728972/

相关文章:

c++ - `import` 和 `#include` 之间的区别? cpp20

c++ - 动态规划 : Counting numbers in between

java - 我需要修改这些哈希函数,以便它给出 0<x<10^9 范围内的值

javascript - 从数组中消除项目以达到固定长度 - JavaScript

iphone - 使用 CATransform3D 将矩形图像转换为四边形

c++ - 在 C++ 中创建多个进程并与管道通信

c++ - 传递指针地址

c++ - 为什么在我的程序中调用了两次构造函数?

java - 将 HashMap 键与另一个随机 HashMap 键匹配的算法,从不复制值或匹配自身

algorithm - 为什么这里会出现这种数学模式?