Time complexity 递归函数的复杂性(大O表示法)

Time complexity 递归函数的复杂性(大O表示法),time-complexity,big-o,Time Complexity,Big O,我想确定两个函数的复杂性 第一个我只需要知道我的解是否正确,第二个是因为我正在努力寻找解决方案的两个递归调用,如果可能的话,最好能解决这个问题,这样我就可以了解它是如何完成的 第一: def sum(list): assert len(list)>0 if len(list) == 1: return list[0] else: return sum(list[0:-1]) + list[-1] 尝试的解决方案: T(0) = 4

我想确定两个函数的复杂性

第一个我只需要知道我的解是否正确,第二个是因为我正在努力寻找解决方案的两个递归调用,如果可能的话,最好能解决这个问题,这样我就可以了解它是如何完成的

第一:

def sum(list):
    assert len(list)>0
    if len(list) == 1:
        return list[0]
    else:
        return sum(list[0:-1]) + list[-1]
尝试的解决方案:

T(0) = 4
T(n) = T(n-1) + 1 + c -- True for all n >0 

T(n) = T(n-1) + 1 + c
     = T(n-2) + 2 + 2C
     = T(n-k) + k = kC --(n-k = 0 implies that k=n)
T(n) = T(0) + n + nC
     = T(0) + 2nC --(T0 is nothing but 4)
     = 6nC
Complexity = O(n)  
第二:

def binSum(list):
    if len(list) == 1:  
        return list[0]
    else:
        return binSum(list[:len(list)//2]) + binSum(list[len(list)//2:])
任何帮助都将不胜感激


关于第一种情况,您可以使用递归函数
T(n)=T(n-1)+O(1)
T(0)=O(1)
对时间复杂度进行建模。很明显,它解决了T(n)=O(n)


这里有一个更直接、更正式的归纳证明。基本情况很简单:
T(0)如何
n+nc=n²c
?同样,首先你写
T(0)=4
,然后“
T(0)
就是1”。它不会改变结果,但不一致。也许你想告诉我们你对第二个函数的猜测。为错误道歉,继续从T(n)=T(0)+n+nc:=T(0)+2nc--(T)只不过是4)=4+2nc=6+nc复杂性O(n)??这是正确的。您可以将其编辑到您的问题中。第二个函数呢?我发现将递归函数转换为非递归函数,然后计算复杂度更容易(通常,如果可能的话,几乎总是如此)。对于第二个问题,请尝试将其更改为非递归循环,并查看其复杂性(我想它将是O(n Log(n)),但我没有计算它,因此我可能是错的)。