计算复杂度

时间:2018-10-06 19:59:35

标签: python python-3.x time-complexity big-o

假设我们具有以下功能:

def func(x, value_):
    assert 0 < x < value_
    while x < value_:
        x *= 2

尽管value_可以任意大,而while循环不是无限的,并且比较次数的上限由value_限制。因此,此函数的计算复杂度为O(N)是否正确?

2 个答案:

答案 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加倍。尝试绘制两条线的图形,您会看到它。