Python 你能帮我找到这段代码最坏的大O时间复杂度吗?
我在班上有一次测验,成绩不太好。我想知道是否有人能向我解释我在这里做错了什么——由于新冠肺炎,我们的教授在上网时忙得不可开交,所以我想我应该在这里发帖,因为我还没有听到回应Python 你能帮我找到这段代码最坏的大O时间复杂度吗?,python,algorithm,big-o,Python,Algorithm,Big O,我在班上有一次测验,成绩不太好。我想知道是否有人能向我解释我在这里做错了什么——由于新冠肺炎,我们的教授在上网时忙得不可开交,所以我想我应该在这里发帖,因为我还没有听到回应 def functionC(L): for i in range(len(L)): if L[i] == i: v = L.pop(i) L.insert(i, 2*v) return 我提供了以下答复: 上面的函数是O(n),因为for循环随
def functionC(L):
for i in range(len(L)):
if L[i] == i:
v = L.pop(i)
L.insert(i, 2*v)
return
我提供了以下答复:
上面的函数是O(n),因为for循环随着的大小而增长
L.pop和insert函数都是常数时间
时间这个词被划掉了,但是没有其他解释来解释为什么我收到了这个问题的6/10。我犯了什么错误?为什么
这是问题的图像和我的答案,以证明测验已经评分并交回
从数组中间弹出并插入到数组中是
O(N)
时间,以数组的长度为准。因此,总体时间复杂度为O(N^2)
。在处理数组末尾时,您只会得到O(1)
pop和insert,因为其余元素不必移位,但它在其他地方是O(N)
。如果查看此python wiki文档,您将看到pop intermediate和insert的复杂性被列为O(n) 这依次使上述代码O(n^2)