我有排列方法
public void permute(String str) {
permute(str.toCharArray(), 0, str.length() - 1);
}
private void permute(char[] str, int low, int high) {
if (low == high) {
writeIntoSet(new String(str, 0, length));
} else {
for (int i = low; i <= high; i++) {
char[] x = charArrayWithSwappedChars(str, low, i);
permute(x, low + 1, high);
}
}
}
private char[] charArrayWithSwappedChars(char[] str, int a, int b) {
char[] array = str.clone();
char c = array[a];
array[a] = array[b];
array[b] = c;
return array;
}
但是当我把10个字母长度的字符串放入这个方法时,它会产生10个!组合,需要很多时间。有没有可能如何让它更快?
修改
我需要用10个字母进行排列,但在那之后,我在字典中搜索这些“单词”。例如,我有 - CxRjAkiSvH,我需要单词CAR,CARS,CRASH等。是否有任何性能选项?
答案 0 :(得分:1)
现有的用于生成排列的算法可能比您使用的排列更有效,因此您可以查看one of those。我过去使用过Johnson-Trotter算法,通过使每次最小变化可以获得下一个排列,可以略微提高速度。我不知道你必须在哪种约束下工作,但如果你不必使用Java,最好不要这样做。它根本不会是最快的。特别是如果您的算法使用递归。正如其他人所建议的那样,如果您坚持使用此算法,最好放弃递归方法并尝试使用循环。
答案 1 :(得分:0)
对于10个字符的字符串,有10个字符!排列,没有两种方法可以解决这个问题。您可以通过添加StringBuffer
代替手动使用char[]
或者手动使用{{1}}来提高速度。