如何减少排列时间?

时间:2015-07-14 19:19:16

标签: java time permutation

我真的不希望得到答案,但我认为这更像是一场头脑风暴,所以请给你最好的想法:)

所以我想制作一个程序,对所有ASCII个字符进行排列,我不能连接1000台计算机来计算这个,因为不幸的是我只有一台计算机,所以我需要某种算法加快这个过程。

我让算法找到了可能的组合,但我在网上看,它需要100多年。请帮助。

这是查找排列的代码(它没有找到所有ASCII个字符排列,但是有一个包含所有字母和数字的字符串,并且从该字符串中进行排列):

import java.io.*;

public class doIt extends AI {

    public void check() {
        String letters = "qwertzuioplkjhgfdsayxcvbnm0123456789-_";
        permute(letters);

    }

    public void permute(String letters) {

        int length = letters.length();
        boolean[] used = new boolean[length];
        StringBuffer str = new StringBuffer(length);

        permutation(str, letters, used, length, 0);
    }

    public void permutation(StringBuffer str, String letters, boolean[] used, int length, int position) {

        if (position == length) {
            try {
                File one = new File("G:/AllDateBases/Combinations.txt");
                PrintWriter pw = new PrintWriter(new FileWriter("G:/AllDateBases/Combinations.txt", true));
                pw.println(str.toString());
                pw.close();
            } catch (IOException e) {
                System.out.println("Error");
            }
            return;
        } else {
            for (int i = 0; i < length; i++) {

                if (used[i]) continue;

                str.append(letters.charAt(i));
                used[i] = true;

                permutation(str, letters, used, length, position + 1);

                str.deleteCharAt(str.length() - 1);
                used[i] = false;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

通过排列需要很长时间。在解决需要查看所有可能解决方案的问题时,通常会有一些方法可以减少许多排列,或者有趣的算法可以更快地获得解决方案。

以下是此类问题的示例: https://projecteuler.net/problem=67 尝试所有的组合是不可能的(它需要一台计算机200亿年)。但是使用一个有趣的算法,问题可以在一秒钟内解决。