我发现这个迭代算法打印给定集合的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和进位,以确定哪些元素属于哪个?
答案 0 :(得分:1)
列出二进制基数中的所有整数,并且灯应亮:
{abc}
7 xxx
6 xx-
5 x-x
4 x--
3 -xx
2 -x-
1 --x
0 --- (omitted)
如果列出所有整数,则枚举整数的顺序无关紧要。递增或递减是最自然的方式。