假设我们具有以下功能:
def func(x, value_):
assert 0 < x < value_
while x < value_:
x *= 2
尽管value_
可以任意大,而while循环不是无限的,并且比较次数的上限由value_
限制。因此,此函数的计算复杂度为O(N)是否正确?
答案 0 :(得分:1)
时间复杂度将为read
,其中O(log(m/n, 2))
和m = value_
。在这里,n = x
表示以{2为底的log(i, 2)
的对数。
请考虑一下,如果将i
加倍,则对于固定的x
,可以减少一次迭代。
相反,如果将value_
加倍,则对于固定的value_
,会计算出一个额外的迭代次数。
答案 1 :(得分:1)
O(log n)
随x
的增加而增加,每次执行都将值朝_value
加倍。尝试绘制两条线的图形,您会看到它。