我想知道这段代码的Big-O是什么
def clear_list(my_list):
while len(my_list) > 0:
my_list.pop(0)
return my_list
是O(n ^ 2)还是O(n),因为while循环是O(n)或O(1),pop(0)
也是O(n)。我不认为while循环是O(log n),因为在while循环中没有比较的值被减半。
答案 0 :(得分:3)
我只是为你做了基准测试(编辑:我认为回报是错误的,因为否则为什么我甚至)
from time import time
def check(size):
a = range(size)
start = time()
clear_list(a)
return time() - start
check(40000) # About .4 seconds on my computer
check(80000) # About 1.6 seconds on my computer
显然O(n 2 )
答案 1 :(得分:2)
是O(N ^ 2):
while循环需要N步,直到所有元素都被删除。
list.pop(0)
是O(N);下面列表中的所有元素都必须向上移动一步。缩短列表每个步骤仍然可以在整个过程中平均提供1/2 N步,其中1/2可以忽略(渐开视角时无关紧要)。
答案 2 :(得分:2)
它将是O(n ^ 2)因为在while
循环中你必须遍历所有n个元素,并且在pop
中你必须移动所有跟随的元素第一个元素。
以下是相关答案的链接: What is the time complexity of popping elements from list in Python?