在最坏的情况下没有采取步骤

时间:2015-10-03 15:53:47

标签: python algorithm python-2.7 loops time-complexity

def program2(L):
    squares = []
    for x in L:
        for y in L:
            if x == y:
                squares.append(x*y)
    return squares

根据我的最坏情况采取的步骤是4*n^2 + 2,但这个问题的答案是4*n^2 + 2 + n,解释如下

在最糟糕的情况下,L是一个重复数字的长列表(即[2, 2, 2, 2, ...]。在这种情况下,我们会在x中浏览L的循环每次通过这个循环,我们对变量x执行一个值赋值,然后在y n次执行L的内循环。

内循环对变量y执行一个值赋值。然后每次都检查一个操作(如果x == y)。由于WORST情况是列表由相同的元素组成,因此该检查始终为真 - 因此始终执行第三和第四个操作(x*y和列表追加)。因此内循环在外循环的每次迭代中执行4*n次。因此,嵌套循环结构执行n * (4*n + 1) = 4*n**2 + n次!

添加两个步骤(对于第一个赋值语句和return语句),我们看到在最坏的情况下,该程序执行4*n**2 + n + 2个步骤。

为什么我们要加+ 1(4n + 1)。无法理解这一点,因为没有执行的步骤是4n(包括内部循环并且内部没有步骤)。

1 个答案:

答案 0 :(得分:0)

对于内循环:

(4*n+1)部分包括:

4*n - >也就是说,每个y变量一次。

  1. 为变量y赋值。
  2. 检查x==y
  3. 计算x*y
  4. 将值附加到squares
  5. +1部分指的是为内循环分配x,完成n次。

    然后,在最后,添加已经提到的其余两个步骤:声明squares并返回它。