need an algorithm to find possible combinations
Hi,
does anyone know the algorith to find the combinations of given elememnts .
for example if A,B,C,D are the given elements. like this i may have a,b,c,d ,e. so given n number of elemnts i want an algorithm to find the possible comintaions
Variuos possible combinations are
1.A AND B AND C AND D
2.(A AND B AND C ) MINUS ( A AND B AND C AND D)-- THIS GIVES THE LEMENTS OLY PRESENT IN (A AND B AND C BUT NOT IN 1.)
3.(A AND B AND D) MINUS (A AND B AND C AND D)
4.(A AND D AND C) MINUS (A AND B AND C AND D)
5 (B AND C AND D)MINUS (A AND B AND C AND D)
6.(A AND B) MINUS (A AND B AND C)
7.(A AND C) MINUS (A AND B AND C)
8. (A AND D) MINUS (A AND D AND C)
9. (B AND C) MINUS (A AND B AND C)
10 (B AND D) MINUS (B AND C AND D)
11.(C AND D) MINUS (B AND C AND D)
12.A MINUS B MINUS C MINUS D
13.B MINUS C MINUS D MINUS A
14. C MINUS D MINUS A MINUS B
15D MINUS A MINUS B MINUS A
[996 byte] By [
DP_devAa] at [2007-9-29 21:27:53]

You may be able to adapt this code.
/*
The CombinationGenerator Java class systematically generates all combinations of n
elements, taken r at a time. The algorithm is described by Kenneth H. Rosen, Discrete
Mathematics and Its Applications, 2nd edition (NY: McGraw-Hill, 1991), pp. 284-286.
The class is very easy to use. Suppose that you wish to generate all possible
three-letter combinations of the letters "a", "b", "c", "d", "e", "f", "g".
Put the letters into an array. Keep calling the combination generator's getNext ()
method until there are no more combinations left. The getNext () method returns
an array of integers, which tell you the order in which to arrange your original
array of letters. Here is a snippet of code which illustrates how to use the
CombinationGenerator class.
String[] elements = {"a", "b", "c", "d", "e", "f", "g"};
int[] indices;
CombinationGenerator x = new CombinationGenerator (elements.length, 3);
StringBuffer combination;
while (x.hasMore ()) {
combination = new StringBuffer ();
indices = x.getNext ();
for (int i = 0; i < indices.length; i++) {
combination.append (elements[indices[i]]);
}
System.out.println (combination.toString ());
}
Another example of the usage of the CombinationGenerator is shown below in connection with the Zen Archery problem.
Source Code
The source code is free for you to use in whatever way you wish.
//--
// Systematically generate combinations.
//--
*/
import java.math.BigInteger;
public class CombinationGenerator {
private int[] a;
private int n; // all combinations of n elements
private int r; // taken r at a time
private BigInteger numLeft;
private BigInteger total;
//
// Constructor
//
public CombinationGenerator (int n, int r) {
if (r > n) {
throw new IllegalArgumentException ();
}
if (n < 1) {
throw new IllegalArgumentException ();
}
this.n = n;
this.r = r;
a = new int[r];
BigInteger nFact = getFactorial (n);
BigInteger rFact = getFactorial (r);
BigInteger nminusrFact = getFactorial (n - r);
total = nFact.divide (rFact.multiply (nminusrFact));
reset ();
}
//
// Reset
//
public void reset () {
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
numLeft = new BigInteger (total.toString ());
}
//
// Return number of combinations not yet generated
//
public BigInteger getNumLeft () {
return numLeft;
}
//--
// Are there more combinations?
//--
public boolean hasMore () {
return numLeft.compareTo (BigInteger.ZERO) == 1;
}
//
// Return total number of combinations
//
public BigInteger getTotal () {
return total;
}
//
// Compute factorial
//
private static BigInteger getFactorial (int n) {
BigInteger fact = BigInteger.ONE;
for (int i = n; i > 1; i--) {
fact = fact.multiply (new BigInteger (Integer.toString (i)));
}
return fact;
}
//--
// Generate next combination (algorithm from Rosen p. 286)
//--
public int[] getNext () {
if (numLeft.equals (total)) {
numLeft = numLeft.subtract (BigInteger.ONE);
return a;
}
int i = r - 1;
while (a[i] == n - r + i) {
i--;
}
a[i] = a[i] + 1;
for (int j = i + 1; j < r; j++) {
a[j] = a[i] + j - i;
}
numLeft = numLeft.subtract (BigInteger.ONE);
return a;
}
}
Thanks for all your response.
But all the combination generator i have come across does generate only abc,bcd etc..
NOTE
I want an expresion for elements presetn in A AND B AND C ALONE THE EXPRESSION FOR THIS IS .(A AND B AND C ) MINUS ( A AND B AND C AND D)--
IF WE HAVE A, B,C,D FOLLOWING IS THE COMBINATIONS I ASK FOR
1.A AND B AND C AND D
2.(A AND B AND C ) MINUS ( A AND B AND C AND D)-- THIS GIVES THE LEMENTS OLY PRESENT IN (A AND B AND C BUT NOT IN 1.)
3.(A AND B AND D) MINUS (A AND B AND C AND D)
4.(A AND D AND C) MINUS (A AND B AND C AND D)
5 (B AND C AND D)MINUS (A AND B AND C AND D)
6.(A AND B) MINUS (A AND B AND C)
7.(A AND C) MINUS (A AND B AND C)
8. (A AND D) MINUS (A AND D AND C)
9. (B AND C) MINUS (A AND B AND C)
10 (B AND D) MINUS (B AND C AND D)
11.(C AND D) MINUS (B AND C AND D)
12.A MINUS B MINUS C MINUS D
13.B MINUS C MINUS D MINUS A
14. C MINUS D MINUS A MINUS B
15D MINUS A MINUS B MINUS A