Power Set - GeeksforGeeks (2024)

Last Updated : 08 Mar, 2024

Improve

Power Set: Power set P(S) of a set S is the set of all subsets of S. For example S = {a, b, c} then P(s) = {{}, {a}, {b}, {c}, {a,b}, {a, c}, {b, c}, {a, b, c}}.
If S has n elements in it then P(s) will have 2n elements

Example:

Set = [a,b,c]
power_set_size = pow(2, 3) = 8
Run for binary counter = 000 to 111

Value of Counter Subset
000 -> Empty set
001 -> a
010 -> b
011 -> ab
100 -> c
101 -> ac
110 -> bc
111 -> abc

Recommended Practice

Power Set

Try It!

Algorithm:

Input: Set[], set_size
1. Get the size of power set
powet_set_size = pow(2, set_size)
2 Loop for counter from 0 to pow_set_size
(a) Loop for i = 0 to set_size
(i) If ith bit in counter is set
Print ith element from set for this subset
(b) Print separator for subsets i.e., newline

Method 1:
For a given set[] S, the power set can be found by generating all binary numbers between 0 and 2n-1, where n is the size of the set.
For example, for the set S {x, y, z}, generate all binary numbers from 0 to 23-1 and for each generated number, the corresponding set can be found by considering set bits in the number.

Below is the implementation of the above approach.

C++

// C++ program for the above approach

#include <bits/stdc++.h>

using namespace std;

// Function to print all the power set

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++) {

// Check if jth bit in the counter is set

// If set then print jth element from set

if (counter & (1 << j))

cout << set[j];

}

cout << endl;

}

}

/*Driver code*/

int main()

{

char set[] = { 'a', 'b', 'c' };

printPowerSet(set, 3);

return 0;

}

// This code is contributed by SoM15242

C

#include <stdio.h>

#include <math.h>

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++)

{

/* 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");

}

}

/*Driver program to test printPowerSet*/

int main()

{

char set[] = {'a','b','c'};

printPowerSet(set, 3);

return 0;

}

Java

// Java program for power set

import java .io.*;

public class GFG {

static void printPowerSet(char []set,

int set_size)

{

/*set_size of power set of a set

with set_size n is (2**n -1)*/

long pow_set_size =

(long)Math.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++)

{

/* Check if jth bit in the

counter is set If set then

print jth element from set */

if((counter & (1 << j)) > 0)

System.out.print(set[j]);

}

System.out.println();

}

}

// Driver program to test printPowerSet

public static void main (String[] args)

{

char []set = {'a', 'b', 'c'};

printPowerSet(set, 3);

}

}

// This code is contributed by anuj_67.

Python3

# python3 program for power set

import math;

def printPowerSet(set,set_size):

# set_size of power set of a set

# with set_size n is (2**n -1)

pow_set_size = (int) (math.pow(2, set_size));

counter = 0;

j = 0;

# Run from counter 000..0 to 111..1

for counter in range(0, pow_set_size):

for j in range(0, set_size):

# Check if jth bit in the

# counter is set If set then

# print jth element from set

if((counter & (1 << j)) > 0):

print(set[j], end = "");

print("");

# Driver program to test printPowerSet

set = ['a', 'b', 'c'];

printPowerSet(set, 3);

# This code is contributed by mits.

C#

// C# program for power set

using System;

class GFG {

static void printPowerSet(char []set,

int set_size)

{

/*set_size of power set of a set

with set_size n is (2**n -1)*/

uint pow_set_size =

(uint)Math.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++)

{

/* Check if jth bit in the

counter is set If set then

print jth element from set */

if((counter & (1 << j)) > 0)

Console.Write(set[j]);

}

Console.WriteLine();

}

}

// Driver program to test printPowerSet

public static void Main ()

{

char []set = {'a', 'b', 'c'};

printPowerSet(set, 3);

}

}

// This code is contributed by anuj_67.

Javascript

<script>

// javascript program for power setpublic

function printPowerSet(set, set_size)

{

/*

* set_size of power set of a set with set_size n is (2**n -1)

*/

var pow_set_size = parseInt(Math.pow(2, set_size));

var 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)) > 0)

document.write(set[j]);

}

document.write("<br/>");

}

}

// Driver program to test printPowerSet

let set = [ 'a', 'b', 'c' ];

printPowerSet(set, 3);

// This code is contributed by shikhasingrajput

</script>

PHP

<?php

// PHP program for power set

function printPowerSet($set, $set_size)

{

// set_size of power set of

// a set with set_size

// n is (2**n -1)

$pow_set_size = pow(2, $set_size);

$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))

echo $set[$j];

}

echo "\n";

}

}

// Driver Code

$set = array('a','b','c');

printPowerSet($set, 3);

// This code is contributed by Vishal Tripathi

?>

Output

ababcacbcabc

Time Complexity: O(n2n)
Auxiliary Space: O(1)

Method 2: (sorted by cardinality)

In auxiliary array of bool set all elements to 0. That represent an empty set. Set first element of auxiliary array to 1 and generate all permutations to produce all subsets with one element. Then set the second element to 1 which will produce all subsets with two elements, repeat until all elements are included.

Below is the implementation of the above approach.

C++

// C++ program for the above approach

#include <bits/stdc++.h>

using namespace std;

// Function to print all the power set

void printPowerSet(char set[], int n)

{

bool *contain = new bool[n]{0};

// Empty subset

cout << "" << endl;

for(int i = 0; i < n; i++)

{

contain[i] = 1;

// All permutation

do

{

for(int j = 0; j < n; j++)

if(contain[j])

cout << set[j];

cout << endl;

} while(prev_permutation(contain, contain + n));

}

}

/*Driver code*/

int main()

{

char set[] = {'a','b','c'};

printPowerSet(set, 3);

return 0;

}

// This code is contributed by zlatkodamijanic

Java

// Java program for the above approach

import java.util.*;

class GFG

{

// A function to reverse only the indices in the

// range [l, r]

static int[] reverse(int[] arr, int l, int r)

{

int d = (r - l + 1) / 2;

for (int i = 0; i < d; i++) {

int t = arr[l + i];

arr[l + i] = arr[r - i];

arr[r - i] = t;

}

return arr;

}

// A function which gives previous

// permutation of the array

// and returns true if a permutation

// exists.

static boolean prev_permutation(int[] str)

{

// Find index of the last

// element of the string

int n = str.length - 1;

// Find largest index i such

// that str[i - 1] > str[i]

int i = n;

while (i > 0 && str[i - 1] <= str[i]) {

i--;

}

// If string is sorted in

// ascending order we're

// at the last permutation

if (i <= 0) {

return false;

}

// Note - str[i..n] is sorted

// in ascending order Find

// rightmost element's index

// that is less than str[i - 1]

int j = i - 1;

while (j + 1 <= n && str[j + 1] < str[i - 1]) {

j++;

}

// Swap character at i-1 with j

int temper = str[i - 1];

str[i - 1] = str[j];

str[j] = temper;

// Reverse the substring [i..n]

str = reverse(str, i, str.length - 1);

return true;

}

// Function to print all the power set

static void printPowerSet(char[] set, int n)

{

int[] contain = new int[n];

for (int i = 0; i < n; i++)

contain[i] = 0;

// Empty subset

System.out.println();

for (int i = 0; i < n; i++) {

contain[i] = 1;

// To avoid changing original 'contain'

// array creating a copy of it i.e.

// "Contain"

int[] Contain = new int[n];

for (int indx = 0; indx < n; indx++) {

Contain[indx] = contain[indx];

}

// All permutation

do {

for (int j = 0; j < n; j++) {

if (Contain[j] != 0) {

System.out.print(set[j]);

}

}

System.out.print("\n");

} while (prev_permutation(Contain));

}

}

/*Driver code*/

public static void main(String[] args)

{

char[] set = { 'a', 'b', 'c' };

printPowerSet(set, 3);

}

}

// This code is contributed by phasing17

Python3

# Python3 program for the above approach

# A function which gives previous

# permutation of the array

# and returns true if a permutation

# exists.

def prev_permutation(str):

# Find index of the last

# element of the string

n = len(str) - 1

# Find largest index i such

# that str[i - 1] > str[i]

i = n

while (i > 0 and str[i - 1] <= str[i]):

i -= 1

# If string is sorted in

# ascending order we're

# at the last permutation

if (i <= 0):

return False

# Note - str[i..n] is sorted

# in ascending order Find

# rightmost element's index

# that is less than str[i - 1]

j = i - 1

while (j + 1 <= n and str[j + 1] < str[i - 1]):

j += 1

# Swap character at i-1 with j

temper = str[i - 1]

str[i - 1] = str[j]

str[j] = temper

# Reverse the substring [i..n]

size = n-i+1

for idx in range(int(size / 2)):

temp = str[idx + i]

str[idx + i] = str[n - idx]

str[n - idx] = temp

return True

# Function to print all the power set

def printPowerSet(set, n):

contain = [0 for _ in range(n)]

# Empty subset

print()

for i in range(n):

contain[i] = 1

# To avoid changing original 'contain'

# array creating a copy of it i.e.

# "Contain"

Contain = contain.copy()

# All permutation

while True:

for j in range(n):

if (Contain[j]):

print(set[j], end="")

print()

if not prev_permutation(Contain):

break

# Driver code

set = ['a', 'b', 'c']

printPowerSet(set, 3)

# This code is contributed by phasing17

C#

// C# program for the above approach

using System;

using System.Linq;

using System.Collections.Generic;

class GFG

{

// A function which gives previous

// permutation of the array

// and returns true if a permutation

// exists.

static bool prev_permutation(int[] str)

{

// Find index of the last

// element of the string

int n = str.Length - 1;

// Find largest index i such

// that str[i - 1] > str[i]

int i = n;

while (i > 0 && str[i - 1] <= str[i]) {

i--;

}

// If string is sorted in

// ascending order we're

// at the last permutation

if (i <= 0) {

return false;

}

// Note - str[i..n] is sorted

// in ascending order Find

// rightmost element's index

// that is less than str[i - 1]

int j = i - 1;

while (j + 1 <= n && str[j + 1] < str[i - 1]) {

j++;

}

// Swap character at i-1 with j

var temper = str[i - 1];

str[i - 1] = str[j];

str[j] = temper;

// Reverse the substring [i..n]

int size = n - i + 1;

Array.Reverse(str, i, size);

return true;

}

// Function to print all the power set

static void printPowerSet(char[] set, int n)

{

int[] contain = new int[n];

for (int i = 0; i < n; i++)

contain[i] = 0;

// Empty subset

Console.WriteLine();

for (int i = 0; i < n; i++) {

contain[i] = 1;

// To avoid changing original 'contain'

// array creating a copy of it i.e.

// "Contain"

int[] Contain = new int[n];

for (int indx = 0; indx < n; indx++) {

Contain[indx] = contain[indx];

}

// All permutation

do {

for (int j = 0; j < n; j++) {

if (Contain[j] != 0) {

Console.Write(set[j]);

}

}

Console.Write("\n");

} while (prev_permutation(Contain));

}

}

/*Driver code*/

public static void Main(string[] args)

{

char[] set = { 'a', 'b', 'c' };

printPowerSet(set, 3);

}

}

// This code is contributed by phasing17

Javascript

// JavaScript program for the above approach

// A function which gives previous

// permutation of the array

// and returns true if a permutation

// exists.

function prev_permutation(str){

// Find index of the last

// element of the string

let n = str.length - 1;

// Find largest index i such

// that str[i - 1] > str[i]

let i = n;

while (i > 0 && str[i - 1] <= str[i]){

i--;

}

// If string is sorted in

// ascending order we're

// at the last permutation

if (i <= 0){

return false;

}

// Note - str[i..n] is sorted

// in ascending order Find

// rightmost element's index

// that is less than str[i - 1]

let j = i - 1;

while (j + 1 <= n && str[j + 1] < str[i - 1]){

j++;

}

// Swap character at i-1 with j

const temper = str[i - 1];

str[i - 1] = str[j];

str[j] = temper;

// Reverse the substring [i..n]

let size = n-i+1;

for (let idx = 0; idx < Math.floor(size / 2); idx++) {

let temp = str[idx + i];

str[idx + i] = str[n - idx];

str[n - idx] = temp;

}

return true;

}

// Function to print all the power set

function printPowerSet(set, n){

let contain = new Array(n).fill(0);

// Empty subset

document.write("<br>");

for(let i = 0; i < n; i++){

contain[i] = 1;

// To avoid changing original 'contain'

// array creating a copy of it i.e.

// "Contain"

let Contain = new Array(n);

for(let indx = 0; indx < n; indx++){

Contain[indx] = contain[indx];

}

// All permutation

do{

for(let j = 0; j < n; j++){

if(Contain[j]){

document.write(set[j]);

}

}

document.write("<br>");

} while(prev_permutation(Contain));

}

}

/*Driver code*/

const set = ['a','b','c'];

printPowerSet(set, 3);

// This code is contributed by Gautam goel (gautamgoel962)

Output

abcabacbcabc

Time Complexity: O(n2n)
Auxiliary Space: O(n)

Method 3:

We can use backtrack here, we have two choices first consider that element then don’t consider that element.

Below is the implementation of the above approach.

C++

#include <bits/stdc++.h>

using namespace std;

void findPowerSet(char* s, vector<char> &res, int n){

if (n == 0) {

for (auto i: res)

cout << i;

cout << "\n";

return;

}

res.push_back(s[n - 1]);

findPowerSet(s, res, n - 1);

res.pop_back();

findPowerSet(s, res, n - 1);

}

void printPowerSet(char* s, int n){

vector<char> ans;

findPowerSet(s, ans, n);

}

int main()

{

char set[] = { 'a', 'b', 'c' };

printPowerSet(set, 3);

return 0;

}

Java

import java.util.*;

class Main

{

public static void findPowerSet(char []s, Deque<Character> res,int n){

if (n == 0){

for (Character element : res)

System.out.print(element);

System.out.println();

return;

}

res.addLast(s[n - 1]);

findPowerSet(s, res, n - 1);

res.removeLast();

findPowerSet(s, res, n - 1);

}

public static void main(String[] args)

{

char []set = {'a', 'b', 'c'};

Deque<Character> res = new ArrayDeque<>();

findPowerSet(set, res, 3);

}

}

Python3

# Python3 program to implement the approach

# Function to build the power sets

def findPowerSet(s, res, n):

if (n == 0):

for i in res:

print(i, end="")

print()

return

# append the subset to result

res.append(s[n - 1])

findPowerSet(s, res, n - 1)

res.pop()

findPowerSet(s, res, n - 1)

# Function to print the power set

def printPowerSet(s, n):

ans = []

findPowerSet(s, ans, n)

# Driver code

set = ['a', 'b', 'c']

printPowerSet(set, 3)

# This code is contributed by phasing17

C#

// C# code to implement the approach

using System;

using System.Collections.Generic;

class GFG

{

// function to build the power set

public static void findPowerSet(char[] s,

List<char> res, int n)

{

// if the end is reached

// display all elements of res

if (n == 0) {

foreach(var element in res)

Console.Write(element);

Console.WriteLine();

return;

}

// append the subset to res

res.Add(s[n - 1]);

findPowerSet(s, res, n - 1);

res.RemoveAt(res.Count - 1);

findPowerSet(s, res, n - 1);

}

// Driver code

public static void Main(string[] args)

{

char[] set = { 'a', 'b', 'c' };

List<char> res = new List<char>();

// Function call

findPowerSet(set, res, 3);

}

}

// This code is contributed by phasing17

Javascript

// JavaScript program to implement the approach

// Function to build the power sets

function findPowerSet(s, res, n)

{

if (n == 0)

{

for (var i of res)

process.stdout.write(i + "");

process.stdout.write("\n");

return;

}

// append the subset to result

res.push(s[n - 1]);

findPowerSet(s, res, n - 1);

res.pop();

findPowerSet(s, res, n - 1);

}

// Function to print the power set

function printPowerSet(s, n)

{

let ans = [];

findPowerSet(s, ans, n);

}

// Driver code

let set = ['a', 'b', 'c'];

printPowerSet(set, 3);

// This code is contributed by phasing17

Output

cbacbcacbaba

Time Complexity: O(2^n)
Auxiliary Space: O(n)

Recursive program to generate power set
Refer Power Set in Java for implementation in Java and more methods to print power set.
References:
http://en.wikipedia.org/wiki/Power_set

If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



`; tags.map((tag)=>{ let tag_url = `videos/${getTermType(tag['term_id__term_type'])}/${tag['term_id__slug']}/`; tagContent+=``+ tag['term_id__term_name'] +``; }); tagContent+=`
Power Set - GeeksforGeeks (2024)

References

Top Articles
Idaho - Unberührte Natur in den Rocky Mountains - USA-Info.net
Entdecke Idahos unberührte Wildnis und reiche Geschichte
Patreon, reimagined — a better future for creators and fans
Walgreens Pharmqcy
Jesus Calling December 1 2022
Mr Tire Prince Frederick Md 20678
Miles City Montana Craigslist
Category: Star Wars: Galaxy of Heroes | EA Forums
Back to basics: Understanding the carburetor and fixing it yourself - Hagerty Media
Crime Scene Photos West Memphis Three
Ecers-3 Cheat Sheet Free
The most iconic acting lineages in cinema history
Tracking Your Shipments with Maher Terminal
Maplestar Kemono
Prestige Home Designs By American Furniture Galleries
Craigslist Toy Hauler For Sale By Owner
Fraction Button On Ti-84 Plus Ce
Where Is George The Pet Collector
2024 INFINITI Q50 Specs, Trims, Dimensions & Prices
Barber Gym Quantico Hours
Chaos Space Marines Codex 9Th Edition Pdf
2021 Volleyball Roster
Zillow Group Stock Price | ZG Stock Quote, News, and History | Markets Insider
Thick Ebony Trans
Vernon Dursley To Harry Potter Nyt Crossword
Tuw Academic Calendar
Afni Collections
How do you get noble pursuit?
Restored Republic
Lesson 1.1 Practice B Geometry Answers
Rlcraft Toolbelt
Vlocity Clm
Sf Bay Area Craigslist Com
Chapaeva Age
How to Watch the X Trilogy Starring Mia Goth in Chronological Order
Kips Sunshine Kwik Lube
Craigslist Greencastle
CVS Near Me | Somersworth, NH
Facebook Marketplace Marrero La
دانلود سریال خاندان اژدها دیجی موویز
Zasilacz Dell G3 15 3579
Nearest Ups Office To Me
D-Day: Learn about the D-Day Invasion
Indiana Jones 5 Showtimes Near Cinemark Stroud Mall And Xd
20 bank M&A deals with the largest target asset volume in 2023
Arnesons Webcam
Conan Exiles Colored Crystal
Terrell Buckley Net Worth
Craigslist Anc Ak
Runelite Ground Markers
Morgan State University Receives $20.9 Million NIH/NIMHD Grant to Expand Groundbreaking Research on Urban Health Disparities
Selly Medaline
Latest Posts
Article information

Author: Geoffrey Lueilwitz

Last Updated:

Views: 5875

Rating: 5 / 5 (60 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Geoffrey Lueilwitz

Birthday: 1997-03-23

Address: 74183 Thomas Course, Port Micheal, OK 55446-1529

Phone: +13408645881558

Job: Global Representative

Hobby: Sailing, Vehicle restoration, Rowing, Ghost hunting, Scrapbooking, Rugby, Board sports

Introduction: My name is Geoffrey Lueilwitz, I am a zealous, encouraging, sparkling, enchanting, graceful, faithful, nice person who loves writing and wants to share my knowledge and understanding with you.