如何找出任何编程的时间复杂性

时间:2015-05-01 07:03:04

标签: time-complexity execution-time

任何人都可以帮助我获得这个编程的时间复杂性。 ?这里我放了3个循环,每个循环依赖于另一个循环。我的意思是内部循环依赖于顶部内部循环,顶部内部循环依赖于外部循环。

public static String getLargestPallindrome(String str)
{   StringBuffer s=new StringBuffer();  
    for(int i=0;i<str.length()-1;i++) //outer loop
    { 
        for(int j=str.length()-1;j>i;j--)  //top inner loop
        {  
            for(int k=i;k<=j;k++){   // inner lopp
            s=s.append(str.charAt(k)+"");}
            System.out.println("substring is "+s); 
            System.out.println("hey sub string is "+s.toString()); checkPallindrome(s.toString());
            s=s.append("");  s=new StringBuffer();

        }

    }

    return  largestPallindrome;

}

2 个答案:

答案 0 :(得分:1)

通过查看所使用的for循环的数量,找不到时间复杂性是不容易的。您需要了解代码流并计算发生的计算次数。在这种情况下,它约为n*n*(n-1)/2,这使得时间复杂度O(n^3),因为多项式的最高度是n^3。其中n是字符串str

的大小

答案 1 :(得分:0)

当你说它只运行了6次时,这是不正确的。 尝试在每个循环中放置打印状态,然后您就会知道它执行了多少时间。

public static String getLargestPallindrome(String str)
{   StringBuffer s=new StringBuffer();  
    for(int i=0;i<str.length()-1;i++) //outer loop
    { 
        System.out.println("Foo");
        for(int j=str.length()-1;j>i;j--)  //top inner loop
        {  
            System.out.println("Bar");
            for(int k=i;k<=j;k++){   // inner lopp
            s=s.append(str.charAt(k)+"");}
            System.out.println("substring is "+s); 
            System.out.println("hey sub string is "+s.toString()); checkPallindrome(s.toString());
            s=s.append("");  s=new StringBuffer();

        }

    }

    return  largestPallindrome;

}