任何人都可以帮助我获得这个编程的时间复杂性。 ?这里我放了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;
}
答案 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;
}