[英]How to decrese permutation time?
我不太希望得到答案,但是我認為這更像是頭腦風暴,所以請給你最好的主意:)
因此,我想制作一個可以對所有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;
}
}
}
}
進行排列需要很長時間。 解決需要仔細研究所有可能解決方案的問題時,通常可以采用多種方法來減少許多排列,或者使用有趣的算法來更快地獲得解決方案。
這是一個這樣的問題示例: https : //projecteuler.net/problem=67嘗試所有組合都是不可能的(這將花費200億年的計算機時間)。 但是使用有趣的算法,問題可以在一秒鍾之內解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.