python - 复杂度与运行时间的实际增长不匹配? (Python)

标签 python algorithm time-complexity complexity-theory

我在 python 中运行了 2 个代码,然后测量了完成所需的时间。代码非常简单,只是递归最大值。这里是: 1.

def max22(L, left, right):
  if(left>=right):
    return L[int(left)]
  k = max22(L,left,(left+right-1)//2)
  p = max22(L, (right+left+1)//2,right)
  return max(k,p)


def max_list22(L):
  return max22(L,0,len(L)-1)

def max2(L):
  if len(L)==1:
    return L[0]
  l = max2(L[:len(L)//2])
  r = max2(L[len(L)//2:])
  return max(l,r)

第一个应该在 O(logn) 中运行 (imo),第二个在 O(n*logn) 中运行。 但是,我测量了 n=1000 、 n=2000 和 n=4000 的运行时间, 不知何故,这两种算法的增长似乎都是线性的!这怎么可能?我是否弄错了复杂性,或者可以吗? 谢谢。

最佳答案

第一个算法不是 O(log n) 因为它检查每个元素的值。可能显示为O(n)

至于第二个,可能您只是没有注意到 n 和 nlogn 在如此小的尺度上的区别。

关于python - 复杂度与运行时间的实际增长不匹配? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299851/

相关文章:

python - 如何从现有 key 设置新 key :value pair of a defaultdict?

python - 在 Google App Engine + Python 中获取 IP 地址

java - 查找数组中的数字

algorithm - 一维动态规划的懒惰打结

algorithm - 算法时间复杂度的输入单元

Python迭代器内存错误

python - 有没有办法让 python omnicomplete 与 vim 中的非系统模块一起工作?

java - 该算法查找 Anagrams 的时间复杂度和空间复杂度是多少?

algorithm - 以下合并算法的时间复杂度是多少?

c - 递归函数的空间复杂度(Time & Space)