一个while循环的大O.

时间:2015-11-03 01:27:31

标签: python while-loop big-o

我想知道这段代码的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循环中没有比较的值被减半。

3 个答案:

答案 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?