Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 时间复杂度O(n)是如何计算的?_Python_Arrays_Python 3.x_Performance_Time Complexity - Fatal编程技术网

Python 时间复杂度O(n)是如何计算的?

Python 时间复杂度O(n)是如何计算的?,python,arrays,python-3.x,performance,time-complexity,Python,Arrays,Python 3.x,Performance,Time Complexity,让我们假设以下代码(Python)-数组中的Leader def goldenLeader(A): n = len(A) size=0 for k in xrange(n): if (size == 0): size += 1 value = A[k] else: if (value != A[k]): size -= 1 else: size += 1 candidate = -1

让我们假设以下代码(Python)-数组中的Leader

def goldenLeader(A):
    n = len(A)
    size=0
    for k in xrange(n):
       if (size == 0): size += 1
          value = A[k] else:
       if (value != A[k]): size -= 1
       else:
         size += 1
    candidate = -1 if (size > 0):
    candidate = value leader = -1
    count = 0
    for k in xrange(n):
        if (A[k] == candidate): count += 1
    if(count>n//2): leader = candidate
    return leader
因此,由于我们要遍历数组A两次,时间复杂度应该是O(n+n)

但提到时间复杂度为O(n)


为什么呢?

O符号只关心
n
的顺序(换句话说,
n
的幂)。因此,
n
被提升到1的幂的任何事物都被认为是
O(n)
,例如
O(n)
O(2n)
O(n+1)


类似地,
O(n^2)
O(n^2+2n)
等都被认为是
O(n^2)
O(n+n)==O(2n)==O(n)
。大O表示法“隐藏”乘法常数;我推荐一点它是如何工作的。应该注意的是O(n)和所有其他O都是集合,而不是数字。更好的表达方式是O(n+n)∈ O(n).@chepner if-Big-O表示法“隐藏”乘法常数;如果m>n,那么O(m+n)应该是O(m)。@manishkumar m+n是任意的。O(m)==O(n)在您的示例中,即使m>n,就大O而言。图形算法的运行时间通常有这样一个“分割”输入大小,以强调图形的密度如何影响运行时间。比较Dijkstra的单源最短路径算法(
O(m+n lg n)
),该算法对图中的边数敏感,而Floyd Warshall的算法(
O(n^3)
)则不敏感。感谢您的简短回答。大家好!!!阅读更多“换句话说,n的力量”:它关心的更多,每一个非常数因子都是相关的,比如
O(n log n)
,这当然不等于
O(n)
@walnut,但请注意,我没有提到这个例子
O(n*logn)
O(n+logn)
不同<代码>O(n+logn)是
O(n)