So hatte ich diesen Code Permutationen ein Wort zu erzeugen, und speichern Sie es auf ein HashSet für später mit einem Wörterbuch verglichen werden. Aber wenn das Eingabewort 10 oder mehr Buchstaben hat, wird der Permutationsprozess lächerlich langsam. Gibt es neben dem Permutationsalgorithmus Möglichkeiten, die Leistung dieses Prozesses zu verbessern?Performance: JAVA Permutation
/**
* 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;
}
eine Anfangskapazität angeben, die die erwartete Anzahl der Einträge in Ihrem 'HashSet' Spiele, damit es nicht ständig erweitert werden muss. – Henrik
Die Komplexität Ihres Algorithmus ist O (n!). Das ist eine ungeheure Komplexität, die es sein könnte. für 10 dauert es 3628800 Schritte –
@Henrik gut, die Sache ist, ich weiß nicht die erwartete Anzahl, es könnte 1000000 oder 100000000 je nach Länge der Eingabe-String sein. Ich bin mir jedoch nicht sicher, ob HashSet die beste Option ist. –