給定一組我想要顯示其所有子集(其功率集)。我發現這個代碼:給定集的功率集
void printPowerSet(char *set, int set_size)
{
/*set_size of power set of a set with set_size
n is (2**n -1)*/
unsigned int pow_set_size = pow(2, set_size);
int counter, j;
/*Run from counter 000..0 to 111..1*/
for(counter = 0; counter < pow_set_size; counter++)
{
for(j = 0; j < set_size; j++)
{
if(counter & (1<<j))
printf("%c", set[j]);
}
printf("\n");
}
}
我不明白爲什麼這部分是用來
if(counter & (1<<j))
什麼是它的意義?
該算法的時間複雜度爲O(n2^n)
有沒有更好的方法?
這轉換爲:如果'counter',按位有位nbr。 'j'設置爲1,則... – 2014-09-22 12:15:35
輸出的大小爲O(n * 2^n),所以不能有漸近更快的方法。 – interjay 2014-09-22 12:21:27