Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定循环的big-O运行时?_Python_Big O - Fatal编程技术网

Python 确定循环的big-O运行时?

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

以下最坏情况下的大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
我在计算第二个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