繁体   English   中英

循环算法运行时迭代分析

[英]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-1n个周期。 然后,

i=1, k=0
i=1, k=1
...
i=1, k=A-1

这也持续n个周期。 看到图案了吗? 对于i每个值,我们将迭代n次。 现在,这将继续下去,直到我们用尽我们知道也是A-1n次的i所有值。 因此,此函数的运行时间将为O(n^2)

严格来说,最坏情况下的运行时(big-O)不会因编程语言而改变编程语言。 当然,每种编程语言的优化程度不同,执行的时间也不同,但严格考虑算法周期,它们是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM