Saturday, January 31, 2015

Printing powerset for given set of characters.

Printing powerset of characters is somewhat easy. Here the key point is to understand that for a given number of n characters we will have (2^N)-1 combinations. We will then count thru integers starting from 1 to (2^N)-1 and then check the bit set on the integer and accordingly the same element will be printed from the character array. Below is the C implementation of this interesting program :
/*
* Combinatorial.cpp
*
* Created on: Dec 6, 2014
* Author: prasadnair
*/
#include <stdio.h>
#include <math.h>
void printPowerSet(char *, int );
/*Driver program to test printPowerSet*/
int main()
{
char set[] = {'a','b','c', 'd'};
printPowerSet(set, 4);
getchar();
return 0;
}
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((float)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++)
{
/* Check if jth bit in the counter is set
If set then print jth element from set */
if(counter & (1<<j))
printf("%c", set[j]);
}
printf("\n");
}
}
view raw PowerSet.c hosted with ❤ by GitHub

No comments:

Post a Comment