我正在为面试而学习,我在网上的“数学”类别下偶然发现了这个问题。
生成给定集合的幂集:
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;
}
请我不要一个明确的答案。我只是想要关于如何解决这个问题的澄清和提示。
我在谷歌上检查了幂集算法,但我仍然不明白如何解决这个问题。
另外,有人可以重申一下问题的要求吗?
谢谢。
Power set of a set A is the set of all of the subsets of A.
这不是世界上最友好的定义,但一个例子会有所帮助:
Eg. for {1, 2}
,子集是:{}, {1}, {2}, {1, 2}
因此,功率集为{{}, {1}, {2}, {1, 2}}
To generate the power set, observe how you create a subset : you go to each element one by one, and then either retain it or ignore it.
让这个决定用一个位(1/0)来表示。
因此,要生成{1}
,你会选择1
并掉落2
(10).
在类似的行上,您可以为所有子集编写一个位向量:
- {} -> 00
{1} -> 10
{2} -> 01
{1,2} -> 11
重申一下:子集是通过包含原始集合的部分或全部元素而形成的。因此,要创建子集,您需要转到每个元素,然后决定是保留它还是删除它。这意味着对于每个元素,您有 2 个决策。因此,对于一个集合,你最终可以得到2^N
不同的决策,对应2^N
不同的子集。
看看是否可以从这里领取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)