【发布时间】:2017-08-05 09:07:37
【问题描述】:
问。就 N 而言,以下最坏情况的 big-oh 运行时是多少?假设 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) 中运行,而不是在 cmets 中指出的 O(log N)。
【问题讨论】:
-
您可能喜欢将
while语句单行排列的紧凑风格,但它们使我们更难掌握您的代码来审查它。起初我以为你有一个语法错误,直到我看到':'埋在这些行的中间。请为您的while语句使用标准缩进正文重新格式化。我知道这听起来很挑剔,但是如果您发布人们可以快速轻松地掌握的示例代码,您会在 SO 上得到更好的响应。 -
感谢您的建议。我已经重新格式化了代码 sn-p。
-
提示:
while x ** 2 < c:将循环与while x < sqrt(c):相同的次数 -
其他提示:您最初声明 N = log(x),所以 log x / log 42 与 N 成正比,而不是 log(N)。
-
在第一个循环中,
c计算循环的次数,所以它与 N 成正比。第二个循环运行 sqrt(c) 次,所以我们总共有 O(N+sqrt( N))