세트가 주어지면 모든 부분 집합 (그것의 힘 세트)를 표시하고 싶습니다.주어진 세트의 힘 세트
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)
입니다. 더 좋은 방법이 있습니까?
이는 다음과 같이 번역됩니다. '카운터'인 경우 bitwise는 nbr 비트를 갖습니다. 'j'가 1로 설정되면 ... –
출력 크기는 O (n * 2^n)이므로 점근적으로 더 빠른 방법은 없습니다. – interjay