打印功率集的迭代算法解释

时间:2014-09-29 23:27:18

标签: algorithm set

我发现这个迭代算法打印给定集合的power set

void PrintSubsets() 
{ 
   int source[3] = {1,2,3}; 
   int currentSubset = 7; 
   int tmp; 
   while(currentSubset) 
   { 
      printf("("); 
      tmp = currentSubset;

      for(int i = 0; i<3; i++) 
      { 
         if (tmp & 1) 
         printf("%d ", source[i]); 
         tmp >>= 1; 
      } 
      printf(")\n"); 
      currentSubset--; 
   } 
}

但是,我不确定它为什么会起作用。它是否类似于使用一组n位的解决方案,并且在每一步中,使用零和1的重新连接模式添加1和进位,以确定哪些元素属于哪个?

1 个答案:

答案 0 :(得分:1)

列出二进制基数中的所有整数,并且灯应亮:

 {abc}
7 xxx
6 xx-
5 x-x
4 x--
3 -xx
2 -x-
1 --x
0 --- (omitted)

如果列出所有整数,则枚举整数的顺序无关紧要。递增或递减是最自然的方式。