I want to break down and rearranging a string into all possible combinations
Say I have a String: ABCDEF
I want to break it down and output all possible combinations
Combination(6,6) = 1
ABCDEF
Combination(6,5) = 6
BCDEF
ACDEF
ABDEF
ABCEF
ABCDF
ABCDE
Combination(6,4) = 15
BCDE
ACDE
ABDE
ABCE
....
....
....
etc.
Combination(6,3) = 20
BCD
ACD
...
etc.
Combination(6,2) = 15
BC
AB
etc.
However the ouptut must also be arranged into alphabetical order.
How will I do this?
Thanks! Any help will be appreciated!
You can get the algorithm (actually a few of them) from Knuth Volume 4, Fascicle 3 but you’ll have to convert it from his math notation to C#.
Update: As I think about this more, Fascicle 2 (Generating Permutations) is actually more helpful. You can download it free from http://www-cs-faculty.stanford.edu/~knuth/fasc2b.ps.gz though you’ll need gunzip and a PostScript previewer to read it. Generating the subsets of string “ABCDE” is the easy part. Convert it to an array {‘A’, ‘B’, ‘C’, ‘D’, ‘E’}, run a for loop from 0 to 2^N-1 where N is the array length, and treat each value as a bitmask of the elements you’re keeping. Thus 00001, 00010, 00011,… gives you “A”, “B”, “AB”,…
The hard part is generating all the permutations of each subset, so you get “ABC”, “BAC”, “CAB”, etc. A brute force algorithm (like in one of the other answers) will work but will get very slow if the string is long. Knuth has some fast algorithms, some of which will generate the permutations in alphabetical order if the original string was sorted in the first place.