Python 时间复杂度O(n)是如何计算的?
让我们假设以下代码(Python)-数组中的LeaderPython 时间复杂度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
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)