Time complexity 计算函数的时间复杂度

Time complexity 计算函数的时间复杂度,time-complexity,big-o,Time Complexity,Big O,我正在考虑如何正确计算此函数的时间复杂度: def foo(lst): jump = 1 total = 0 while jump < len(lst): for i in range(0, len(lst), jump): total += i jump = jump * 2 return total def foo(lst): 跳转=1 总数=0 当跳跃

我正在考虑如何正确计算此函数的时间复杂度:

def foo(lst):
    jump = 1
    total = 0
    while jump < len(lst):
        for i in range(0, len(lst), jump):
            total += i
        jump = jump * 2
    return total
def foo(lst):
跳转=1
总数=0
当跳跃
我假设它是O(n),其中n是列表的长度。
我们的while循环是O(n),for循环也是O(n),这意味着我们得到了2*O(n),它等于O(n)。

我说得对吗?

您的计算有错误,对于嵌套循环,我们将外循环的复杂度乘以内循环的复杂度,得到完整的复杂度

如果
n
是列表的长度,则while循环运行
log(n)
time,就像每次使用
jump=jump*2

内环是这样的,
n/1
倍于
jump=1
,而
n/2
倍于jump=2,所以内环的复杂度是这样的:(n/1)+(n/2)+(n/4)+(n/8)。。。。直到logn次

因此,总时间复杂度=n(1+1/2+1/4+1/8+…直到logn)。这里的
n
系数可以忽略不计,因此复杂性是
O(n)