这里是我按升序对列表进行排序的代码。我已经在函数中使用了函数。现在我想计算这个函数的时间复杂度。从我的角度来看,我已经计算过,当函数“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'? – Hyperboreus
实际上,它至少是O(n^2),因为'unite'为大小为n1 + n2 = n的输入创建O(n^2)个副本。 (并且O(n log n)在任何意义上都不是近似值。) – delnan
但是我已经看到了几个函数中调用函数的例子。它们具有O(log(n))的复杂度。 – user3096874