java—此置换算法的时间和空间复杂性

ddrv8njm  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(364)

我写了这个排列算法。你能帮我理解它的时空复杂性吗。

public static List<String> permutation(String str) {
    List<String> result = new ArrayList<>();
    if (str.length() == 1) {
        result.add(str);
        return result;
    } else {
        for (char c : str.toCharArray()) {
            List<String> subPermList = permutation(str.replace(c + "", ""));
            for (String substr : subPermList) {
                result.add(c + substr);
            }
        }
        return result;
    }
}
4xrmg8kj

4xrmg8kj1#

我将只集中在这个答案的时间复杂性。第一件事是写下 T(n) :

T(n) = n +                           // str.toCharArray()
       n *                           // for (char c ...)
       (
           T(n-1) +                  // permutation(...)
           n +                       // str.replace(...)
           (n-1)! * n                // for (String substr ...)
       )   
     = n*T(n-1) + n*n! + n² + n

这种递推关系的解是 Θ(n² * n!) .
... 这明显比 Θ(n * n!) ,在生成所有排列列表的最佳实现中得到。

相关问题