1
このコードでは、単語の順列を生成し、後で辞書と比較するために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ステップを要します。 –
@Henrikよく、予想される数字はわかりません。入力文字列の長さに応じて1000000または100000000になります。私はHashSetを使用するのが最善の選択肢だと確信していません。 –