Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Algorithm to convert combinations to bitstring

by doowah2004 (Monk)
on Oct 18, 2006 at 17:50 UTC ( [id://579155]=note: print w/replies, xml ) Need Help??


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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://579155]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2024-04-24 11:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found