0

我有排列方法

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 等。有任何性能选项吗?

4

2 回答 2

1

存在用于生成排列的现有算法,这些算法可能比您正在使用的算法更有效,因此您可以查看其中之一。我过去曾使用过 Johnson-Trotter 算法,该算法通过使最小的变化成为可能,每次都获得下一个排列,从而稍微加快了速度。我不知道您必须在什么样的约束范围内工作,但如果您不必使用 Java,最好不要使用。它根本不会是最快的。特别是如果您的算法使用递归。正如其他人所建议的那样,如果您坚持使用此算法,您最好远离递归方法并尝试使用循环。

于 2012-06-09T16:59:20.073 回答
0

对于 10 个字符的字符串,有 10 个!排列,没有两种方法可以解决这个问题。您可以通过附加到s 或手动StringBuffer使用来稍微加快速度。char[]

于 2012-06-09T16:44:26.167 回答