如何生成给定集合的幂集?
我正在研究面试,并且在网上“数学”类别下偶然发现了这个问题。
生成给定集合的幂集:
int A[] = {1,2,3,4,5}; int N = 5;
int Total = 1 << N;
for ( int i = 0; i < Total; i++ ) {
for ( int j = 0; j < N; j++) {
if ( (i >> j) & 1 )
cout << A[j];
}
cout <<endl;
}
请不要明确的答案。我只想澄清和提示如何解决此问题。
我在Google上检查了功率设置算法,但仍然不明白如何解决此问题。
另外,有人可以重申问题的要求吗?
谢谢。
回答:
Power set of a set A is the set of all of the subsets of A.
这不是世界上最友好的定义,但是一个示例将有所帮助:
例如。对于{1, 2}
,子集为:{}, {1}, {2}, {1, 2}
因此,功率设定为 {{}, {1}, {2}, {1, 2}}
要生成幂集,请观察如何创建子集:逐个转到每个元素,然后保留它或忽略它。
将该决定用比特(1/0)表示。
因此,要生成{1}
,您将1
拖放2
(10)。
在相似的行上,您可以为所有子集写一个位向量:
- {}-> 00
{1}-> 10
{2}-> 01
{1,2}-> 11
重申:一个子集,如果通过包含原始集合的某些或全部元素而形成。因此,要创建一个子集,请转到每个元素,然后决定保留还是删除它。这意味着对于每个元素,您都有2个决策。因此,对于一个集合,您可以得出与不同子集2^N
相对应的不同决策2^N
。
看看是否可以从这里拿起它。
以上是 如何生成给定集合的幂集? 的全部内容, 来源链接: utcz.com/qa/410365.html