时间复杂度如下代码..?

时间:2011-03-24 04:30:36

标签: c++ c algorithm time-complexity

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

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;

5 个答案:

答案 0 :(得分:4)

它将在恒定时间内运行,即O(1),假设电路板[M] [N]为二维数组。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

时间复杂度衡量算法在应用于越来越大的输入时所需的数量级。你的例子确实只依赖于恒定数量的输入,这就是为什么其他人正确地说O(1)。实质上,这意味着时间复杂度不是衡量其效率,质量或其他任何方法的正确工具。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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