在递归函数中有循环的函数的复杂性是什么

时间:2017-06-07 15:44:27

标签: java algorithm loops recursion

我试图分析这段代码的复杂性。 我预测它的o(n ^ 2) 因为for循环在递归函数中取o(n)取o(n) o(n)* o(n)= o(n ^ 2) 但是我不确定。

public class main 
{

    static Set<String> setString = new HashSet<>();

    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        main m = new main();
        m.permute("sanad", 0);
        for(String s : setString)
        {
            System.out.println(s);
        }

    }


    public void permute(String str , int i )
    {
        if (i>=str.length())
        {
            return;
        }


        for(int j = 0 ; j < str.length();j++)
        {
            StringBuilder b = new StringBuilder(str. replaceFirst(String.valueOf(str.charAt(i)), ""));
            b.insert(j,str.charAt(i));
            setString.add(b.toString());
        }

        permute(str, ++i);
    }

}

1 个答案:

答案 0 :(得分:6)

你是正确的,因为总复杂性是嵌套复杂性的产物,并且置换函数被称为 n 次,其中 n 是字符串的长度,循环也被称为 n 次,导致循环的 n ^ 2 调用。但是,您还必须查看循环内部代码的复杂性,尤其是replaceFirstinsert,决定它们的运行时是否依赖于字符串的长度,并且也与它相乘。因为我怀疑这是一个家庭作业问题,所以我把它留给你。