package info.ephyra.util; import java.util.ArrayList; /** * A collection of array transformation utilities. * * @author Nico Schlaefer * @version 2007-05-03 */ public class ArrayUtils { /** * Gets all subsets of the given array of objects. * * @param objects array of objects * @return all subsets */ public static Object[][] getAllSubsets(Object[] objects) { ArrayList<Object[]> subsets = new ArrayList<Object[]>(); getAllSubsetsRec(subsets, new ArrayList<Object>(), objects, 0); return subsets.toArray(new Object[subsets.size()][]); } // recursive implementation of getAllSubsets(Object) private static void getAllSubsetsRec(ArrayList<Object[]> subsets, ArrayList<Object> subset, Object[] objects, int i) { if (i == objects.length) { subsets.add(subset.toArray(new Object[subset.size()])); } else { ArrayList<Object> subset1 = new ArrayList<Object>(); for (Object o : subset) subset1.add(o); ArrayList<Object> subset2 = new ArrayList<Object>(); for (Object o : subset) subset2.add(o); subset2.add(objects[i]); i++; getAllSubsetsRec(subsets, subset1, objects, i); getAllSubsetsRec(subsets, subset2, objects, i); } } /** * Gets all non-empty subsets of the given array of objects. * * @param objects array of objects * @return all non-empty subsets */ public static Object[][] getNonemptySubsets(Object[] objects) { Object[][] subsets = getAllSubsets(objects); Object[][] nonempty = new Object[subsets.length - 1][]; for (int i = 0; i < nonempty.length; i++) nonempty[i] = subsets[i + 1]; return nonempty; } }