我需要一种算法来查找集合中元素数为 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/