Python 循环的运行时迭代算法分析
如果我有以下代码Python 循环的运行时迭代算法分析,python,arrays,algorithm,array-algorithms,Python,Arrays,Algorithm,Array Algorithms,如果我有以下代码 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个单元,每个循
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个单位运行3*n次。然后每个返回都是一个,但是只有其中一个会运行,所以总的来说,它将相当于
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
次。现在,这将继续进行,直到我们耗尽i
的所有值,我们知道这也是A-1
或n
次。因此,此函数的运行时间将为O(n^2)
更糟糕的情况是,严格来说,运行时(big-O)不会因编程语言的不同而有所不同。当然,每种编程语言都有不同的优化级别,执行时间也不同,但严格考虑到算法周期,它们是相同的 此代码具有恒定的运行时间,因为在
if
的两个分支中都有一个return
。但是如果在循环外部有return
,则运行时间将是O(N^3)。假设我将循环顶部k=i+1的第二个更改为,将第三个更改为l=k+1。运行时间是否为O(n),而不是O(n^3),因为算法会检查任何3个连续数字的总和是否等于0?您刚刚更改了问题中的代码,使其与接受的答案不匹配。在这种情况下,你真的应该让代码保持原样,以便答案与问题相关。我的错!现在修好了谢谢!如果我能稍微调整一下算法的话。假设我将循环top k=i+1的第二个值更改为l=k+1。运行时间是否为O(n),而不是O(n^3),因为算法会检查任意3个连续数字的总和是否等于0?