Code for Variations with repetition (combinatorics)?

后端 未结 4 1555
伪装坚强ぢ
伪装坚强ぢ 2020-12-15 02:34

Does anyone have Java code for generating all VARIATIONS WITH REPETITION?

There are plenty of permutation and combination examples available, and variations must be

相关标签:
4条回答
  • 2020-12-15 03:20

    This works as is, and it's the easiest for you to study.

    public class Main {
        public static void main(String args[]) {
            brute("AB", 3, new StringBuffer());
        }
        static void brute(String input, int depth, StringBuffer output) {
            if (depth == 0) {
                System.out.println(output);
            } else {
                for (int i = 0; i < input.length(); i++) {
                    output.append(input.charAt(i));
                    brute(input, depth - 1, output);
                    output.deleteCharAt(output.length() - 1);
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-15 03:22
    public class Main {
    
        public static void main(String[] args) throws IOException {
            LinkedList<char[]> items = new LinkedList<char[]>();
            char[] item = new char[3];
            char[] input = {'A', 'B'};
            rep(items, input, item, 0);
    
    
            for (char[] rep : items) {
                System.out.println(rep);
            }
        }
    
        private static void rep(LinkedList<char[]> reps, char[] input, char[] item, int count){
            if (count < item.length){
                for (int i = 0; i < input.length; i++) {
                    item[count] = input[i];
                    rep(reps, input, item, count+1);
                }
            }else{
                reps.add(item.clone());
            }
        }
    
    }
    

    produces following output: AAA AAB ABA ABB BAA BAB BBA BBB

    watch out for stack overflows with big tupleSize. recursive algorithms (like this one) are usually slower than iterative versions but they are very handy to code.

    0 讨论(0)
  • 2020-12-15 03:31

    How to write a brute-force password cracker

    While this is no Java implementation, the part doing the permutations should be quite easy to port in Java.

    I ported it to C with no knowledge of Python, and it worked like a charm.

    0 讨论(0)
  • 2020-12-15 03:36

    You can use the principle of n-ary Gray code

    http://en.wikipedia.org/wiki/Gray_code#Constructing_an_n-bit_Gray_code

    0 讨论(0)
提交回复
热议问题