对于以下代码片段,提供逐行分析并构造函数T(n(,该函数将此代码片段的运行时间作为"n"的函数。还要确定此代码段的big-O。
x = 10,000;
for (int i = 1; i <= n; i++) {
if ( x < i)
sum += foo( i );``
system.out.print(sum);
else
for (j = 1; j <= i; j++)
system.out.print( i );
system.out.println( );
}
foo (a) {
for (int i = 0; i < n; i++)
sum += a * i;
return sum;
}
x = 10,000;
1:使该O(1(总共花费1个固定的任意长度的时间
for (int i = 1; i <= n; i++) {
2:运行n次,所以时间现在是O(n(,因为O(n
if ( x < i)
sum += foo( i );``
system.out.print(sum);
3:由于foo中的for循环,这些行在O(n(中运行,因此由于这是嵌套的,对于n>10000 ,这里的时间是O(n^2(
else
for (j = 1; j <= i; j++)
system.out.print( i );
system.out.println( );
}
4:这也将在循环中运行n次,因此O(n^2(表示时间<10000
foo (a) {
for (int i = 0; i < n; i++)
sum += a * i;
return sum;
}
5:见第三条评论
最终:由于这在O(n^2(中运行,对于n>1000和n<10000这个函数是O(n^2(