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)运行,如评论中所指出。
答案 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)
。