确定循环的大O运行时?

时间:2017-08-05 09:07:38

标签: python big-o

Q值。就N而言,以下最糟糕的大运行时间是多少?假设x是一个正整数,其中N = math.log(x,2)。

def bigOh(x):
    c = 1
    while (x > 0) :
        (x, c) = (x // 42, c + 1)
    x = 1
    while (x ** 2 < c) :
        x += 1
    return x

我在计算第二个while循环所涉及的步骤数时遇到问题。第一个应执行log x / log 42次,即O(N).

对于第二个循环,每次都进行检查(x + n) ** 2 < c,其中n是第n次迭代,但是在此之后我几乎被卡住了。

有人可以帮忙吗?

编辑:第一个循环以O(N)而不是O(log N)运行,如评论中所指出。

1 个答案:

答案 0 :(得分:2)

第一个循环执行log x / log 42次。就N = log x / log 2而言,那只是O(N)时间。

第一次循环后,c ~ O(log x)。 第二个循环在x ~ sqrt(c)时终止。因此,它应该循环sqrt(c)次,即O(sqrt(log x)) = O(sqrt(N))。 因此,bigOh的总运行时间为O(N + sqrt(N)) = O(N)