繁体   English   中英

Python:for循环内min()的时间复杂度function

[英]Python: Time complexity of min() function inside for loop

我正在计算算法的时间复杂度,我假设下面的两个代码都具有 O(n^2) 的时间复杂度但是我的书说第一个代码是 O(n^2),第二个是 O(n)。 我不明白为什么。 两者都使用最小/最大,所以有什么区别? 代码 1:

def sum(l, n):

for i in range(1, n - 1):
    x = min(l[0:i])
    y = min(l[i:num])
return x+y

代码 2:

def sum(a, n):
r = [0] * n
l = [0] * n
min_el = a[0]

for i in range(n):
    min_el = min(min_el, a[i])
    l[i] = min_el


print(min_el)

在第一个代码块中,该代码块在整个数组上运行 min function,这需要 O(n) 时间。 现在考虑它在一个长度为 n 的循环中,那么总时间是 O(n^2)

查看第二个代码块。 请注意,最小 function 仅比较 2 个值,可以说是 O(1)。 现在考虑它在一个长度为 n 的循环中。 总时间只是 O(n+n+n) 的总和,等于 O(n)

在第一个代码中,它给 min() function 一个数组,这个 O(n) 时间复杂度是因为它检查数组中的所有元素,在第二个代码中,min() 函数只比较两个值,它需要 O (1)

暂无
暂无

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

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