我真的不希望得到答案,但我认为这更像是一场头脑风暴,所以请给你最好的想法:)
所以我想制作一个程序,对所有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;
}
}
}
}
答案 0 :(得分:0)
通过排列需要很长时间。在解决需要查看所有可能解决方案的问题时,通常会有一些方法可以减少许多排列,或者有趣的算法可以更快地获得解决方案。
以下是此类问题的示例: https://projecteuler.net/problem=67 尝试所有的组合是不可能的(它需要一台计算机200亿年)。但是使用一个有趣的算法,问题可以在一秒钟内解决。