我需要帮助理解简单的复杂性

时间:2016-12-09 16:36:08

标签: python-3.x

有人可以解释二次方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

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)