用确定的比较器成倍增加的循环运行时间是多少?

时间:2018-10-08 20:21:53

标签: java loops time-complexity big-o

此循环在Big-O中的运行时间是什么?

for(int n=100; n <= 60000; n = n * 3){
....inner loop code....
}

我认为它是O(logn),但我不确定,因为它运行了一定的次数。从100开始,到每次60000乘以3,是运行的固定次数。是O(logn)吗?

3 个答案:

答案 0 :(得分:1)

正确的答案是O(1),因为循环运行一定次数,在这种情况下,循环始终是线性时间。

答案 1 :(得分:0)

它不是O(log n)。就像您说的那样,此循环的运行时间是恒定的,并且不依赖于某些变量n。如果循环运行的次数取决于外部提供的某个参数(例如数组的长度或该算法处理的内容),则可以在这里使用Big-O表示法

答案 2 :(得分:0)

假设循环内的代码为O(1),则复杂度为O(log3 n)

由于每次迭代都乘以3,所以要迭代的次数大约为x,其中100 * 3 ^ x = 60000

要根据x重新排列公式,您将得到3^x = 600,因此x = log3(600)

现在我假设60000是此处的输入n,您想了解增加此数字时所需的时间如何变化,从而得到log3关系。

enter image description here