假设您使用python内置的compute
函数具有以下sum
函数:
def compute(a_list):
for i in range(0, n): #Line 1
number = sum(a_list[0:i + 1])/(i+1) #Line 2
return number
这样的事情的时间复杂度是什么样的?
Line 1
被执行n次,但是具有内置Line 2
函数(O(n))的sum
会被执行n ^ 2次吗?因此该算法为O(n ^ 2)。
对于i的每次迭代,Line 2
执行1 + 2 + 3 + ... + n-2 + n-1 + n。这些条款的总和是
这是正确的吗?
答案 0 :(得分:1)
我想说第1行执行一次,这会使第2行执行n
次。列表下标是O(n),sum
也是O(n)。除,加和赋都是O(1)。
compute
因此是O(N ^ 2),因为最大的项正在评估O(n)运算O(n)次。
请注意,按照书面规定,它会丢弃所有中间结果,因此可以将其重写为:
def compute(a_list):
return sum(a_list[0:n])/n
应该是O(n)。