【发布时间】:2015-05-22 19:21:24
【问题描述】:
我正在尝试计算下一个函数max_list11 的时间复杂度,它会递归地找到一个列表的最大值:
def max11(L,left,right):
if left==right:
return L[left]
return max(L[left], max11(L,left+1,right))
def max_list11(L):
return max11(L,0,len(L)-1)
据我发现,时间复杂度应该是O(n),因为该函数所做的是n 2 个对象列表的最大时间,尽管当我计算运行时间时,我得到运行时间的多项式增长(显然O(n²)),我想知道为什么会这样。
我用这种方式计时:
def elasped(f,L):
t0 = time.clock()
s = f(L)
return(time.clock()-t0)
def avg_elasped(f,L,times = 100):
measurements = []
for i in range(times):
measurements += [elasped(f,L)]
return sum(measurements)/times
然后我尝试了 1000、2000、...、10000 个长列表。
【问题讨论】:
-
因为你的时机不好。这是
O(n),我有自己的时间来展示它。 -
无论你说什么,我想你都是对的。我不相信我做错了什么,但是当我计算运行时间时,我在 Excel 中得到了一个完美的抛物线。
-
你是怎么计时的?
-
用计时器编辑。
标签: python max time-complexity complexity-theory