难以理解函数的运行时复杂性

时间:2019-06-27 12:39:05

标签: python runtime time-complexity

我正在为考试而学习,问题如下。给定功能:

def foo(lst):
   count = 0
   while len(lst)>1:
       mid = len(lst)//2
       lst = lst[:mid]
       count += lst[-1]
   return count

它的运行时复杂度是什么?

据我了解,由于每次将列表切成两半,因此外部while循环将运行logn次。切片是O(n)活动,因此,运行时为nlogn。不幸的是,答案声称运行时间为O(n)。我哪里出错了?

1 个答案:

答案 0 :(得分:2)

简短答案:切片列表以 O(n)运行,但是由于该列表每次都切成两半,因此表示 n < / em>在第二个迭代中是前一个的一半。

如果切片到 k 恰好采用了 k “指令”,则表示算法归结为 n / 2 + n / 4 + n / 8 + ... + 1 ,或更正式的形式:

document.cookie = "cookieNameAsString='cookieValue'; max-age=time;";

上面的geometric serie [wiki]等于:

log n
---     n
\      ---
/        i
---     2
i=1

所以指令的总数是 O(n)