Print All the Subsets of a Given Set (Power Set)

Objective: Given a set of numbers, print all the posssible subsets of it including empty set.

Power Set: In mathematics, PowerSet of any given set S, PS(S) is set of all subsets of S including empty set.
Example:

 S ={1,2,3}

PS(S): {{ᵩ}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}.

Approach:

Solution to this problem is similar to – Print All Combinations of subset of size K from Given Array

  • Create an binary array of the same size as the given array.
  • Now for every integer we have two options, whether to select it or ignore it.
  • Now if we select it, we will put 1 in the boolean array at the corresponding index or if we ignore it, put 0 at that index.
  • Say you have a variable called x, which represents the current index at the given array.
  • Make x = 0 ( ignoring xth index) and x = 1( selecting xth index) and make recursive

Code:

public class AllCombinations {
static int[] B = { 1, 2, 3 };
public void combinations(int[] A, int x) {
if (x == A.length 1) {
A[x] = 0; // last digit, don't select it
printArray(A); // print the set
A[x] = 1; //// last digit, select it
printArray(A);
return;
}
A[x] = 0; //either you will not select this digit
combinations(A, x + 1);
A[x] = 1; //either you will select this digit
combinations(A, x + 1);
}
public void printArray(int[] A) {
boolean isNULL = true;
System.out.print("{");
for (int i = 0; i < B.length; i++) {
if (A[i] == 1) {
System.out.print(B[i] + "");
isNULL = false;
}
}
if (isNULL == false) {
System.out.print("}");
System.out.print(" ");
}
if (isNULL) {
System.out.print("Empty");
System.out.print("} ");
}
}
public static void main(String[] args) {
AllCombinations a = new AllCombinations();
int[] A = new int[B.length];
a.combinations(A, 0);
}
}

view raw
AllCombinations.java
hosted with ❤ by GitHub


Output:

{Empty} {3}  {2}  {23}  {1}  {13}  {12}  {123}