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)),但我没有计算它,因此我可能是错的)。