Python 确定循环的big-O运行时?
以下最坏情况下的大oh运行时是什么,以N为单位?假设x是一个正整数,其中N=math.log(x,2)Python 确定循环的big-O运行时?,python,big-o,Python,Big O,以下最坏情况下的大oh运行时是什么,以N为单位?假设x是一个正整数,其中N=math.log(x,2) def bigOh(x): c=1 而(x>0): (x,c)=(x//42,c+1) x=1 而(x**2
def bigOh(x):
c=1
而(x>0):
(x,c)=(x//42,c+1)
x=1
而(x**2
我在计算第二个while循环涉及的步骤数时遇到问题。第一个应执行logx/log42
次数,即O(N)。
对于第二个循环,每次都进行检查(x+n)**2
,其中n是第n次迭代,但在这之后我几乎被卡住了
有人能帮忙吗
编辑:第一个循环以O(N)而不是注释中指出的O(logn)运行。第一个循环执行
logx/log42次。就N=logx/log2
而言,这只是O(N)
时间
在第一个循环之后,c~O(logx)
。
当x~sqrt(c)
时,第二个循环终止。因此,它应该循环sqrt(c)
次,即O(sqrt(logx))=O(sqrt(N))
。
因此,bigOh
的总运行时间是O(N+sqrt(N))=O(N)
第一个循环执行logx/log42次。就N=logx/log2
而言,这只是O(N)
时间
在第一个循环之后,c~O(logx)
。
当x~sqrt(c)
时,第二个循环终止。因此,它应该循环sqrt(c)
次,即O(sqrt(logx))=O(sqrt(N))
。
因此,bigOh
的总运行时间是O(N+sqrt(N))=O(N)
您可能喜欢在while
语句中使用紧凑的样式,但这会使我们更难掌握您的代码来查看它。起初我认为你有一个语法错误,直到我看到'':埋在中间的那些线。请使用标准缩进正文重新格式化while
语句。我知道这听起来像是吹毛求疵,但如果您发布人们可以快速轻松掌握的示例代码,您将获得更好的响应。谢谢您的建议。我已经重新格式化了代码段。提示:while x**2
将循环与while x
其他提示:您最初声明N=log(x),因此log x/log 42与N成比例,而不是log(N)。在第一个循环中,c
计算循环的数量,因此它与N成正比。第二个循环运行sqrt(c)次,因此我们总共有O(N+sqrt(N))。您可能喜欢紧凑的样式,即在while
语句中添加一行,但它们使我们更难掌握您的代码来查看它。起初我认为你有一个语法错误,直到我看到'':埋在中间的那些线。请使用标准缩进正文重新格式化while
语句。我知道这听起来像是吹毛求疵,但如果您发布人们可以快速轻松掌握的示例代码,您将获得更好的响应。谢谢您的建议。我已经重新格式化了代码段。提示:while x**2
将循环与while x
其他提示:您最初声明N=log(x),因此log x/log 42与N成比例,而不是log(N)。在第一个循环中,c
计算循环的数量,所以它与N成正比。第二个循环运行sqrt(c)次,所以我们得到了O(N+sqrt(N))
def bigOh(x):
c = 1
while (x > 0) :
(x, c) = (x // 42, c + 1)
x = 1
while (x ** 2 < c) :
x += 1
return x