in reply to Algorithm to convert combinations to bitstring

If you just want to know the place of the combination, then you could do the following:

let n be the 0 based length of your set (for ABCDE n = 4) let x be the 0 based position of the first element (for 'CD' x = 2) let y be the 0 based position of the second element (for 'CD' y = 3) The position in the outputed combination would be: [n(n+1)-x(x+1)]/2 + y-x so for 'CD': [4(4+1) - 2(2+1)]/2 + 3 - 2 ==> [20 - 6]/2 + 1 = 8 (solution is not 0 based)

not sure if that is what you wanted, but fun to think about.


*Updated* added the code tags per L~R's request.

Replies are listed 'Best First'.
Re^2: Algorithm to convert combinations to bitstring
by Limbic~Region (Chancellor) on Oct 18, 2006 at 17:55 UTC
    doowah2004,
    Please use <CODE> tags to prevent things in [] from being interpreted as a link. FWIW, I already had a solution in mind before posting this but didn't include it as to not influence anyone. Your solution is similar to mind except you have not generalized it - what if instead of 2 items at a time I am taking 4?

    Cheers - L~R

      I will use an arbitrary example to show my line of think though it is not completely pieced together. Anyway this is what I have come up with:

      for the alphabet (A-Z) n = 26
      let k = 3
      we want the location of 'HRY'
      to find the "start location for 'H', that is the first instance where 'H' is the first character, we use:

      sum[(n-x)!/((k-y)!*(n-x-k)!)]as x=0..z where: y = the base 1 position of 'H' in 'HRY' (in this case 1) z = the base 1 position of 'H' in the alphabet


      There are 2 special cases, when k = 2 and when k = n. I will not address k = n because it is uninteresting, and for k = 2 see my previous comment in this thread.

      If k > 3, then you would sum across the above equation for each character in the combination making the a appropriate substitution for y, and making a substitution for n such that n' = n - the alphabetic position of the character before it.

      Hope that this is not too messy. Also this was done with pen and paper, so it is untested.