Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1292
  • Last Modified:

Create a powerset in Java

Hi,

 In Java I want to create a powerset, when i give  a set and a number for the size for e.g.

{1,2,3,4} set:3
------------------
{1,2,3}
{1,2,4}
{1,3,4}
{2,3,4}

or
{1,2,3} set 2
{1,2}
{1,3}
{2,3}

thanks
0
kimia_az
Asked:
kimia_az
  • 4
2 Solutions
 
for_yanCommented:
This implementation is for all sets, I guess it is easy to modify only limiting to
certain size
0
 
objectsCommented:
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
for_yanCommented:

This will print only sets of 2 out of {1,2,3}

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SetUtils {
    public static <T> Set<Set<T>> powerSet(Set<T> originalSet) {
        Set<Set<T>> sets = new HashSet<Set<T>>();
        if (originalSet.isEmpty()) {
            sets.add(new HashSet<T>());
            return sets;
        }
        List<T> list = new ArrayList<T>(originalSet);
        T head = list.get(0);
        Set<T> rest = new HashSet<T>(list.subList(1, list.size()));
        for (Set<T> set : powerSet(rest)) {
            Set<T> newSet = new HashSet<T>();
            newSet.add(head);
            newSet.addAll(set);
            sets.add(newSet);
         
            sets.add(set);
        }

       
        return sets;
    }

    public static void main(String[] args){
    Set<Integer> mySet = new HashSet<Integer>();
    mySet.add(1);
    mySet.add(2);
    mySet.add(3);
    for (Set<Integer> s : SetUtils.powerSet(mySet)) {
        if(s.size() == 2)
        System.out.println(s);
    }

    
}
}

Open in new window

0
 
for_yanCommented:

This will print only sets of 3 out of {1,2,3,4}  a little bit nicer:


import java.util.*;

public class SetUtils {
    public static <T> Set<Set<T>> powerSet(Set<T> originalSet) {
        Set<Set<T>> sets = new HashSet<Set<T>>();
        if (originalSet.isEmpty()) {
            sets.add(new HashSet<T>());
            return sets;
        }
        List<T> list = new ArrayList<T>(originalSet);
        T head = list.get(0);
        Set<T> rest = new HashSet<T>(list.subList(1, list.size()));
        for (Set<T> set : powerSet(rest)) {
            Set<T> newSet = new HashSet<T>();
            newSet.add(head);
            newSet.addAll(set);
            sets.add(newSet);
         
            sets.add(set);
        }


        return sets;
    }


        public static <T> Set<Set<T>> powerSet1( Set<T>mySet, int n){
                  Set<Set<T>> sets1 = new  HashSet<Set<T>>();
           Set originalSet =  SetUtils.powerSet(mySet);
            Iterator it = originalSet.iterator();
            while(it.hasNext()) {
                Set s = (Set) it.next();
                if(s.size() == n)sets1.add(s);
            }


            return sets1;
        }


    public static void main(String[] args){
    Set<Integer> mySet = new HashSet <Integer>();
    mySet.add(1);
    mySet.add(2);
    mySet.add(3);
     mySet.add(4);    
    for (Set <Integer> s : SetUtils.powerSet1(mySet, 3)) {
               System.out.println(s);
    }

    
}
}

Open in new window

0
 
msk_apkCommented:
int setLength = 3;
		int[] array = new int[]{1,2,3,4};
		for(int i=0;i<array.length-2;i++)
		{			
			for(int j=i+1;j<array.length -1;j++)
			{
				for(int k=j+1;k<array.length;k++)
				{
					int[] temp = new int[setLength];
					temp[0] = array[i];
					temp[1] = array[j];
					temp[2] = array[k];
					
					System.out.println(temp[0]+","+temp[1]+","+temp[2]);
				}
			}
		}

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now