有人可以帮助我找到以下代码段的运行时复杂性吗?
请帮助我找到上面给出的代码段的运行时复杂性。
答案 0 :(得分:1)
我猜你的代码有问题,特别是在第一个while循环中。
while (i <= n);
在while loop
语句后面加一个分号表示循环语句下没有语句。为了您的信息,这个while循环将无限运行,因为您没有更新循环变量i
。
如果你错误地放了那个分号,那么while会迭代n
次,这会使while循环的时间复杂度为O(n)
。
但是第二个while循环的时间复杂度为O(log n)
,因为您通过将值减半来减少循环变量j
。
while (j > 0)
y := x/(2*j);
j = j /2;
i = 2 *i;
因此,总的来说,如果你同时考虑两个while循环,那么总时间复杂度应该是O(n + log n)
,相当于O(n)
。