我最近了解Big Oh表示法。我最近遇到了书中给出的例子。
void Function(int n)
{
int i=1 ;
int s=1 ;
while( s <= n)
{
i++ ;
s= s+i ;
print(\*");
}
}
我不知道作者如何得到上述算法的时间复杂度为O(√n)。我只是想了解得出这个结论的过程?
答案 0 :(得分:2)
可以很容易地将其视为s is growing quadratic in terms of number of iteration
。
s = 1 // set as 1 initially
现在我们要添加S = s + i // Where i increasing linearly by one unit in each iteration
//So it's just a addition i.e. s = 1 + 2 + 3 +4 ....+i, which will sum up to s = i(i+1)/2
因此s = i(i+1)/2 = (i^2+i)/2
其中i是迭代次数。
现在,在i
次迭代中,我们得到s = (i^2+i)/2
要获得s >=n
,我们只需要√n
次迭代。
因此,给定程序的时间复杂度为O(√n)
。