Java 如何减少排列时间?

Java 如何减少排列时间?,java,time,permutation,Java,Time,Permutation,我真的不希望得到答案,但我觉得这更像是一场头脑风暴,所以请给出你最好的想法:) 所以我想做一个程序,对所有字符进行排列,我不能连接1000台计算机来计算,因为不幸的是我只有一台计算机,所以我需要某种算法来加速这个过程 我做这个算法是为了找到可能的组合,但我在网上查找,这将需要100多年的时间。请帮忙 这是查找排列的代码(它不查找所有字符排列,但有一个包含所有字母和数字的字符串,他从该字符串进行排列): import java.io.*; 公共类doIt扩展了AI{ 公共作废检查(){ 字符串字母

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

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

我做这个算法是为了找到可能的组合,但我在网上查找,这将需要100多年的时间。请帮忙

这是查找排列的代码(它不查找所有字符排列,但有一个包含所有字母和数字的字符串,他从该字符串进行排列):

import java.io.*;
公共类doIt扩展了AI{
公共作废检查(){
字符串字母=“QWERTZUIOPLKJHGFDSAYXCVNM0123456789-”;
排列(字母);
}
公共无效排列(字符串字母){
int length=字母.length();
布尔值[]已使用=新布尔值[长度];
StringBuffer str=新的StringBuffer(长度);
排列(str,字母,已用,长度,0);
}
public void置换(StringBuffer str、字符串字母、使用的布尔[]、int-length、int-position){
如果(位置==长度){
试一试{
文件一=新文件(“G:/alldatebase/combines.txt”);
PrintWriter pw=new PrintWriter(new FileWriter(“G:/alldatebase/combines.txt”,true));
println(str.toString());
关闭();
}捕获(IOE异常){
System.out.println(“错误”);
}
返回;
}否则{
for(int i=0;i
进行排列需要很长时间。当解决需要查看所有可能的解决方案的问题时,通常会有一些方法来删除许多排列,或者使用有趣的算法来更快地获得解决方案

下面是这样一个问题的示例:
尝试所有的组合是不可能的(一台计算机需要200亿年)。但是使用一个有趣的算法,这个问题可以在不到一秒钟的时间内解决

这种行为通常是无界排列的情况。我们可以看看你做了什么吗?注意:不要试图在注释中写超过一行,并且避免尝试在注释中粘贴代码。所有附加信息都应作为原始问题的编辑。Reakskepic谢谢我是新来的,所以我不知道它是如何工作的:)如果你列举n!排列,那么它必然需要时间。但你为什么要这么做?你想解决什么问题?对置换算法有一些很好的讨论。不幸的是,有38个!这个字符串的排列和人类的集体存储空间无法容纳它。是的,但是在O(n)中生成一个排列是可能的,并且对n中的每一个都是唯一的!作为i在1到n中的函数!使用Lehmer代码,有效地按需提供它们。见和。
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;
            }
        }
    }
}