代码之家  ›  专栏  ›  技术社区  ›  Laurence Wingo

用大O符号表示常量意味着什么?

  •  0
  • Laurence Wingo  · 技术社区  · 6 年前

    我在看一段关于“大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)。It makes sense that since the term 'n' is the same then they cancel out. 这是“删除内容”的意思吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   fractals Francisco Flores    6 年前
    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_4n^2,也不需要系数c_4。所以我们有O(n^2)。

    在这个意义上,“降低常数”是指 系数 . 也就是说,即使您的代码可能比O(n^2),或者O(n^2/2)稍微快一点,但对于大的oh来说并不重要;它都是O(n^2)。