【问题标题】:Time Complexity of the following code..?以下代码的时间复杂度..?
【发布时间】:2011-03-24 04:30:35
【问题描述】:

我对以下代码的时间复杂度感到困惑......

i = 0

   //first row
   if(board[i][0] == win && board[i][1] == win && board[i][2] == win)
      return win;

   //second row
   if(board[i+1][0] == win && board[i+1][1] == win && board[i+1][2] == win)
      return win;

   //third row
   if(board[i+2][0] == win && board[i+2][1] == win && board[i+2][2] == win)
      return win;

   //first col
   if(board[0][i] == win && board[1][i] == win && board[1][i] == win)
      return win;

   //second col
   if(board[0][i+1] == win && board[1][i+1] == win && board[2][i+1] == win)
      return win;

   //third col
   if(board[0][i+2] == win && board[1][i+2] == win && board[2][i+2] == win)
      return win;

      //first diag
   if(board[i][i] == win && board[i+1][i+1] == win && board[i+2][i+2] == win)
      return win;

   //second diag
   if(board[i+2][i] == win && board[i+1][i+1] == win && board[i][i+2] == win)
      return win;

【问题讨论】:

  • i 是循环的一部分还是始终为 0?

标签: c++ c algorithm time-complexity


【解决方案1】:

它将在恒定时间内运行,即 O(1) 假设 board[M][N] 是一个二维数组。

【讨论】:

    【解决方案2】:

    这显然是一个陷阱题,看你是否理解时间复杂度的概念。

    时间复杂度衡量算法在应用于越来越大的输入时所需的数量级。您的示例确实仅取决于恒定数量的输入,这就是其他人正确地说 O(1) 的原因。从本质上讲,这意味着时间复杂度并不是衡量其效率、质量等的正确工具。

    【讨论】:

      【解决方案3】:

      O(1) - 没有迭代也没有递归。

      【讨论】:

        【解决方案4】:

        正如其他答案所暗示的那样,它是 O(1)。但这不被认为是良好的编码实践。您可以使用循环来概括它。

        【讨论】:

          【解决方案5】:

          正如您在那里展示的那样,它是 O(1),因为它没有可变方面。执行总是需要相同的时间。

          如果你把它放在一个 i 从 0 到 n-1 的循环中,那么它将有 O(n),即线性复杂度。如果将 n 的大小加倍,则执行时间大约会加倍。

          【讨论】:

            猜你喜欢
            • 2018-02-26
            • 1970-01-01
            • 2014-01-14
            • 2018-05-28
            • 1970-01-01
            • 1970-01-01
            • 2020-07-24
            相关资源
            最近更新 更多