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]
# 1
Sure. It's called "Counting in binary". Let bit 1 represent A, bit 2 represent B, etc.
YATArchivista at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...
# 2
Are we talking about [url= http://www.cut-the-knot.org/do_you_know/add_set.shtml]sets[/url] here?
tschodta at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...
# 3

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;

}

}

ArtVandelaya at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...
# 4

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

DP_devAa at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...
# 5

Yes you can also take this also as a Set operations.

Lets us say i have A,B,C,D as sets .

I want to find out elements in And b alone

that is (A and B) MINUS (A AND B AND C ) MINUS(A AND B AND D)

WHERE (A AND B AND C ) IS (A AND B AND ) MINUS ((A AND B AND C AND D))

(A AND B AND D) IS

(A AND B AND D) MINUS (A AND B AND C AND D)

DP_devAa at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...
# 6

Can we modify the code so that it gives all the possible combinations having n+1 elements if you have to find out combinations involving n elemnts.

To be more clear let us say i hav A ,B ,C ,D

When i find possible combination involving 2 elements the result will have AB,AC,AD and so on.

So when we find AB we will have to find out all the possible combinations of 3 elements involving AB which are ABC ,ABD

For AC the 3 element combination is ACD ,ABC

DP_devAa at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...
# 7
u can use permutations and combinations for that purpose
hemal4a at 2007-7-16 1:45:32 > top of Java-index,Other Topics,Algorithms...