小编典典

如何生成给定集合的幂集?

algorithm

我正在研究面试,并且在网上“数学”类别下偶然发现了这个问题。

生成给定集合的幂集:

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上检查了功率设置算法,但仍然不明白如何解决此问题。

另外,有人可以重申问题的要求吗?

谢谢。


阅读 489

收藏
2020-07-28

共1个答案

小编典典

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

看看是否可以从这里拿起它。

2020-07-28