【发布时间】:2014-02-26 16:36:24
【问题描述】:
我有一组元素,我想从中提取 ordered 子集。我所说的ordered 子集的意思是我不能在集合内切换元素。我举了三个例子来说明我是如何解决这个问题的。
- 如何递归提取这些子集?
- 你有什么伪代码吗?
- { . } = 子集
示例 1
设S = {f1,f2,f3} 是一个由3 个元素组成的集合。我想提取所有可能的有序子集如下:
-{f1},{f2},{f3} // {f1} is a subset, {f2} is a subset etc.
-{f1,f2},{f3} // {f1,f2} form a subset and {f3} is also a subset
-{f1},{f2,f3} // {f1} is a subset and {f2,f3} form a subset
示例 2
设S = {f1,f2,f3,f4}由4个元素组成。
可能的有序子集:
-{f1},{f2},{f3},{f4}
-{f1,f2},{f3,f4}
-{f1},{f2,f3},{f4}
-{f1},{f2},{f3,f4}
-{f1,f2,f3}{f4}
-{f1},{f2,f3,f4}
-{f1,f2},{f3},{f4}
-{f1,f2,f3,f4}
示例 3
设S = {f1,f2,f3,f4,f5}由5个元素组成。
可能的有序子集:
-{f1},{f2},{f3},{f4},{f5}
-{f1,f2},{f3},{f4},{f5}
-{f1},{f2,f3},{f4},{f5}
-{f1},{f2},{f3,f4},{f5}
-{f1},{f2},{f3},{f4,f5}
-{f1,f2},{f3,f4},{f5}
-{f1},{f2,f3},{f4,f5}
-{f1,f2,f3},{f4,f5}
-{f1,f2,f3},{f4},{f5}
-{f1},{f2,f3,f4},{f5}
-{f1},{f2},{f3,f4,f5}
-{f1,f2},{f3,f4,f5}
-{f1,f2,f3,f4}{f5}
-{f1},{f2,f3,f4,f5}
- etc...
【问题讨论】:
-
你试过什么?添加新元素时可以做哪些新子集?
-
您错过了 4 个元素和 5 个元素的一个子集。 (提示:解决方案数量为
2**(n-1))。
标签: c++ algorithm recursion combinations subset