有人可以解释二次方v2是二次方以及其他任何可能在其他函数中都很重要的细节吗?我认为通过的变量必须被调用两次,因为它是二次的。
def linear(L):
index = 0
while index < len(L):
index = index + 1
def linear_v2(L):
index1 = 0
while index1 < len(L):
index2 = 0
while index2 < 1000000:
index2 += 1
index1 += 1
def quadratic(L):
index1 = 0
while index1 < len(L):
index2 = 0
while index2 < len(L):
index2 += 1
index1 += 1
def quadratic_v2(L):
index1 = 0
while index1 < len(L):
index2 = 0
while index2 < index1:
index2 += 1
index1 += 1
def cubic(L):
index = 0
while index < len(L):
index2 = 0
while index2 < len(L):
index3 = 0
while index3 < len(L):
index3 += 1
index2 += 1
index +=1
def log(L):
index = 0
while 2 ** index < len(L):
index += 1
def exponential(L):
index = 0
while index < 2 ** len(L):
index +=1
答案 0 :(得分:1)
quadratic_v2
是二次的,因为内循环的内容仍将与L的长度成二次比例。系数小于函数quadratic
,但它仍然是二次的。
您可能会想象如果我们增加L的长度,会影响两个循环。外部的一个和内部的一个。内部受影响的次数少于quadratic
,但仍然如此,因为index1
会变大。
对于L n 的长度,quadratic_v2
中内环的内容将在外环1的第一个循环中被调用,在外循环2的第二个循环中等等所有电话将是:
1 + 2 + 3 + ... + n
我们也可以将此总和写为n * (n + 1) / 2
,等于1/2 n^2 + 1/2n
。这意味着函数是O(n^2)
。