我无法根据输入n指示简单while循环的时间复杂度。
只要i< while循环就执行。 n和i比前一次迭代的次数增加一个。例如,在第二次迭代中,i在第3次迭代中递增1,递增2,依此类推......基本上,循环执行“t的最终值”次。
func(n):
i = 1
t = 1
while (i < n):
i = i + t
t = t + 1
我的问题是,如何用big-O表示法指出该算法的时间复杂度?
答案 0 :(得分:3)
基本上,循环执行“t的最终值”次。
你已经到了一半。你知道循环执行t次,现在你只需要解决t。
当1..t之和大于或等于n时,您的循环将结束。通过求解summation,我们可以将其表达为
t*(t-1)/2 >= n
通过重新排列等式以n表示t,我们得到
t >= 1/2 (1 - sqrt(1 + 8 n))
但是,我们也知道循环以满足不等式的t的最低(第一)值结束。让我们称之为价值tn。如果tn是满足不等式的第一个值,则tn-1是满足相反不等式的最后一个值。
tn - 1 <= 1/2 (1 - sqrt(1 + 8 n))
由此,我们知道t由sqrt(n)和一些常数的某个函数在上下限定。那么t是Θ(sqrt(n)),这意味着t也是O(sqrt(n))。