请问大神一个时间复杂度的问题???为什么是O(n^0.5)??而不是O(n^1/3)或其他??

请问大神一个时间复杂度的问题???为什么是O(n^0.5)??而不是O(n^1/3)或其他??

问题描述:

i=0,s=0;
while(s<n)
{s=s+i;
i++;
}

没记错的话,因为你的s是个等差数列的和所以n=(0+x)*x/2

我只知道肯定比O(n)更小,但请问具体怎么算出这个指数

等差数列求和<=n,O(n^0.5)

按照循环条件,
当s>=n时循环结束,
设第x 次循环后退出循环,
此时i = x, s= x(x+1)/2,
代入得到x(x+1)>=2n,
解一元二次方程得到x的值,取正值,得到时间复杂度为O(n^0.5)

 上面的忽略。我看明白了。
等差数列的和等于(1+x)^x/2
现在是知道n<(1+x)^x/2
求x有多少,所以n<x/2+x^x/2
只保留最高次数项
所以n < x^2
也就是O(n)=O(sqrt(n))

0+...+x = n
(0+x)x/2= n
x^2 = 2n
x=根号2n = 根号2 * 根号n
所以O(n) = n开根号