【问题标题】:How do you work out the worst case time complexity of a function您如何计算函数的最坏情况时间复杂度
【发布时间】:2014-01-14 21:13:49
【问题描述】:

如果我们有这样的问题,我们该如何解决:

以下方法的最坏情况时间复杂度是多少 (其中 n 是 array.length):

boolean search(int[] array, int value) {
  for (int j = 0; j < array.length; i++)
    if (array[j] == value)
      return true;
  return false;
}
  • O(1)
  • O(log2 n)
  • O(n)
  • O(n^2)
  • O(n+值)

【问题讨论】:

  • i++ 其复杂性是无限的:D 但与j++ 它将是O(n)

标签: algorithm data-structures big-o time-complexity


【解决方案1】:

这种情况你可以看看代码的结构和原因如下:

我可以看到for (int j = 0; j &lt; array.length; j++) 意味着j 采用从0array.length - 1 的值。所以这意味着这是一个关于数组长度的线性循环。循环内部和循环以下的操作在恒定时间内发生。

所以现在的问题是:最坏的情况是什么?最坏的情况是在数组中根本找不到元素,这意味着您正在遍历整个数组。因此算法在最坏的情况下是O(n)

【讨论】:

  • 一般来说,迭代(循环)的代码的最坏情况复杂度是可以发生的最大迭代次数
  • 最坏的情况实际上是根本找不到元素。但是,这不会改变 O(n) 时间复杂度。
  • @Henry:谢谢,确实如此。我已经更新了我的答案。
【解决方案2】:

最坏的情况是当您要查找的值的索引位于数组的末尾时

所以在这种情况下它将是 O(arraylength-1),因为索引的位置取决于搜索的时间。或 O(n)。 如果你能找到它

http://en.wikipedia.org/wiki/Time_complexity#Table_of_common_time_complexities

【讨论】:

    【解决方案3】:

    在最坏的情况下,array 不包含value,总运行时间为 O(n)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多