Итак, у меня был этот код для генерации перестановок слова и хранения его в HashSet для последующего сравнения со словарем. Но когда входное слово имеет 10 или более букв, процесс перестановки становится смехотворно медленным. Помимо использования алгоритма перестановок, есть ли способы улучшить производительность этого процесса?Производительность: Перестановка JAVA
/**
* Returns a HashSet of the string permutation.
*
* @param prefix an empty string.
* @param str the string to create perm.
* @return permutations a HashSet of the permutation.
*/
private static HashSet<String> permutation(String prefix, String str) {
HashSet<String> permutations = new HashSet<String>();
int n = str.length();
if (n == 0) {
permutations.add(prefix);
} else {
for (int i = 0; i < n; i++) {
permutations.addAll(permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n)));
}
}
return permutations;
}
указать начальную емкость, которая соответствует количеству записей в вашем файле 'HashSet', так что он не должен постоянно расширяться. – Henrik
Сложность вашего алгоритма O (n!). это худшая сложность, которая может быть. для 10 требуется 3628800 шагов –
@ Хенрик хорошо, дело в том, что я не знаю ожидаемого числа, оно может быть 1000000 или 100000000 в зависимости от длины входной строки. Я не уверен, что если использовать HashSet - лучший вариант. –