[英]Analysis of algorithm run time iterative for loops
如果我有以下代码
def func(A,n):
for i in A-1:
for k in A-1:
for l in A-1
if A[i]+A[k]+A[l] = 0:
return True
else:
return False
如何分析该算法的运行时间? 正如我所见,每个 for 循环都有 2 个单元,每个循环运行 n+1 次。 if 循环然后运行 3*n 次,有 3 个单位。 然后每个返回是一个,但是只有一个会运行,所以总的来说它相当于
T(n) = 2(n+1)+2(n+1)+2(n+1)+3(n)+1 = 9n+7
我的逻辑正确还是我遗漏了什么。 运行时也会因语言而异吗?
正如评论所说,现在的代码是 O(1),因为它每次通过一次后都会退出func
。
如果您确实将返回值更改为其他内容,例如设置变量,那么它将变为 O(n^3)。
为了解释如何获得该值,我将把问题简化为两个循环:
def func(A,n):
for i in A-1:
for k in A-1:
# Do Something else
如果你考虑一下这是做什么的,对于我们迭代的每个i
值,我们将执行A-1
次以通过k
循环。
i=0, k=0
i=0, k=1
...
i=0, k = A-1
所以这会持续A-1
或n
个周期。 然后,
i=1, k=0
i=1, k=1
...
i=1, k=A-1
这也持续n
个周期。 看到图案了吗? 对于i
每个值,我们将迭代n
次。 现在,这将继续下去,直到我们用尽我们知道也是A-1
或n
次的i
所有值。 因此,此函数的运行时间将为O(n^2) 。
严格来说,最坏情况下的运行时(big-O)不会因编程语言而改变编程语言。 当然,每种编程语言的优化程度不同,执行的时间也不同,但严格考虑算法周期,它们是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.