以大符号表示常量是什么意思?

时间:2018-08-21 01:01:08

标签: big-o

我正在观看有关Hackerrank的有关Big O符号的视频,在阅读职业生涯杯的材料时,我总是听到“丢弃常数”一词。如果我根据以下算法正确理解,请告诉我:

    function whyWouldIDoThis(array){
     max = NULL
    for each a in array {
      max = MAX(a, max)
    }
    print max
    for each a in array {
      for each b in array {
        print a,b
      }
    }
   }

已解释,由于这是两个单独的for循环,因此第一个for循环为O(n),第二个for循环为O(n ^ 2),并且由于其所有算法最终将其变为O(n ^ 2)。有道理的是,由于术语“ n”相同,因此它们被抵消了。这是按照Big O表示法“删除内容”的意思吗?

1 个答案:

答案 0 :(得分:1)

max = NULL ----------------- c_1
for each a in array {
  max = MAX(a, max) -------- c_2
}
print max ------------------ c_3
for each a in array {
  for each b in array {
    print a, b ------------- c_4
  }
}

逐行分析代码,我们总花费时间为

  

c_1 + c_2 * n + c_3 + c_4 * n * n = c_4 n ^ 2 + c_2 * n + c_1 + c_3

现在我们只需要一个主导项,即c_4 n ^ 2,也不需要系数c_4。所以我们有O(n ^ 2)。

从这个意义上说,“丢弃常数”是丢弃系数。也就是说,即使您的代码可能比O(n ^ 2)快一点,也许比O(n ^ 2/2)快一点,但是就Big-Oh而言,这无关紧要;都是O(n ^ 2)。