嵌套循环中的步数

时间:2017-03-25 13:12:51

标签: algorithm time-complexity big-o

我正在尝试计算以下嵌套循环执行的步骤数,专门用于渐近增长。根据步骤数量,我将得出此算法的Big O.

def get_multiples(list):
    multiple = []
    for o in list:
        for i in list:
            multiple.append(o*i)
    return multiple

我计算的方式如下(列表由大量元素=“n”组成):

  1. 作业声明(步数= 1 ):

    multiple = []
  2. 嵌套循环:

    for o in list:
       for i in list:
           multiple.append(o*i)
    

    在外循环中,变量o被赋值n次。每次外循环执行时,首先将变量i赋值n次,然后将变量乘以n次,最后将列表追加n次。所以没有。步骤= n *(n + n + n) = 3n 2

  3. 退货声明(步数= 1 ):

    return multiple

  4. 因此总数没有。步骤= 3n 2 + 2

    然而,正确的答案是 3n 2 + n +2 。显然,外循环的执行需要额外的 n 步骤,而内循环不需要这些步骤。

    有人可以向我解释我错过了什么吗?

    它对复杂性没有影响,因为它仍然是 O(n 2

2 个答案:

答案 0 :(得分:1)

我认为计算嵌套循环的正确方法如下:

号码o被分配n次。 数字i分配n 2 次,o * i计算n 2 次,追加函数称为n 2 次。

因此n + n 2 + n 2 + n 2 = 3n 2 + n

将其添加到其余部分并获得3n 2 + n + 2

答案 1 :(得分:0)

def get_multiples(list):  
  multiple = []  // 1 STEP  
  for o in list:  // Executed n times, so n STEPS  
    for i in list: // Executed n times for each value of o, so n*n STEPS  
      multiple.append(o*i) // 1 STEP to multiply and 1 STEP to append, repeated for each pair of (o, i), so 2*n*n STEPS  
  return multiple // 1 STEP  

添加以上内容: 1 + n + n 2 + 2n 2 + 1 = 3n 2 + n + 2 < /强>