python中此递归函数的时间复杂度是多少?

时间:2020-09-12 07:08:16

标签: python recursion time-complexity

我有这个功能:

def rec(lst):
    n = len(lst)
    if n <= 1:
        return 1
    return rec(lst[n // 2:]) + rec(lst[:n // 2])

如何找到此函数的时间复杂度?

1 个答案:

答案 0 :(得分:1)

通常在此类问题中,绘制递归树会有所帮助。

enter image description here

看看我添加的这张照片,请注意每个级别的总和为N(因为切片是此处要做的事情), 并且树的深度为logN(这很容易显示,因为我们每次都除以2,所以可以找到解释here)。因此,我们拥有的功能执行O(n) n*logn次,这意味着我们总共拥有O(n*logn)

现在,了解这种情况的另一种方式是使用“ Master Theorem”(我建议您查一下并了解它) 我们这里有T(n) = 2T(n/2) + O(n),因此根据定理a=2, b=2使得log_b(a)等于1,因此 我们有(根据定理的第二种情况):

T(n)=O(logn*(n**(log_b(a)))=O(nlogn)