Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 循环的运行时迭代算法分析_Python_Arrays_Algorithm_Array Algorithms - Fatal编程技术网

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?