我创建了两个算法来计算给定数组的前缀平均值。我想得出两种算法的时间复杂度,但我一直在苦苦挣扎。我观看了这段YouTube视频: https://www.youtube.com/watch?v=udwxWq9wZgg&safe=active。我不明白如何计算for循环和嵌套for循环中的操作。
在2:27,我设法计算PrefixAverages2中for循环中的操作。这是3n + 1。但是,从5:50开始我无法理解。
提前致谢。
public double[] PrefixAverages1(double input[])
{
double A[] = new double[input.length];
double s;
for(int i=0; i <= input.length - 1 ;i++)
{
s = input[0];
for(int j=1; j <= i ;j++)
{
s = s + input[j];
}
A[i] = s / (i+1);
}
return A;
}
public double[] PrefixAverages2(double input[])
{
double A[] = new double[input.length];
double s = 0;
for( int i=0; i <= input.length - 1 ; i++)
{
s = s + input[i];
A[i] = s / (i+1);
}
return A;
}
答案 0 :(得分:1)
for(int i=0; i <= input.length - 1 ;i++)
for(int j=1; j <= i ;j++)
这是二次的,对于给定的i,内循环大约是i次,所以你必须求和i,所以基本上你有像sum_ {i = 1} ^ {i = l} i这样的东西,这是前l个整数的和,所以l(l + 1)/ 2,然后是二次。
对于第二种算法,你只需要一个循环,因此它的复杂性是线性的。