【发布时间】:2013-12-31 09:48:41
【问题描述】:
这是我按升序对列表进行排序的代码。我在函数中使用了函数。现在我想计算这个函数的时间复杂度。从我的角度来看,我计算出每次函数“sort”完成其循环时都会调用函数“unite”。所以这个函数每次都要用到两个函数。所以我得出结论,这个函数的复杂度是 O(nlog(n))。 我是本章的新手。所以我想知道如何计算这种复杂度。上面的答案只是我的近似值。我既不知道真正的答案,也没有任何解决方案或提示。因此,请在您给予时描述您的答案。 谢谢。 这是我的代码。
def sort(lst):
def unite(l1, l2):
if len(l1) == 0:
return l2
elif len(l2) == 0:
return l1
elif l1[0] < l2[0]:
return [l1[0]] + unite(l1[1:], l2)
else:
return [l2[0]] + unite(l1, l2[1:])
if len(lst) == 0 or len(lst) == 1:
return lst
else:
front = sort(lst[:len(lst)/2])
back = sort(lst[len(lst)/2:])
L = lst[:] # the next 3 questions below refer to this line
return unite(front, back)
【问题讨论】:
-
sort4从何而来? -
实际上,它至少是 O(n^2),因为
unite为大小为 n1 + n2 = n 的输入制作了 O(n^2) 份副本。 (而且 O(n log n) 在任何意义上都不是那个近似值。) -
哦,但是我看到了几个在函数中有函数调用的例子。它们具有 O(log(n)) 的复杂性。
-
仅仅因为您在函数中有函数调用并不意味着它们与您的示例具有相同的复杂性。运行时基于函数的作用,而不是它们的构造位置。有一种方法可以编写你的
unite函数,让它在O(n)中运行,但你没有这样做。 -
阅读其他带有
time-complexity和/或big-o标签的问题(尤其是投票率高的问题)可能会让您受益。
标签: python algorithm time-complexity code-complexity