如何计算这个简单算法的最坏情况运行时复杂性

时间:2016-03-06 19:01:26

标签: java algorithm big-o time-complexity complexity-theory

我正在努力学习如何解决最坏情况下的运行时间复杂性,我想知道是否有人可以通过突出显示所有操作等来详细解释如何解决下面的代码....对不起可怕代码示例,我非常清楚它是有史以来最无意义的方法!

{{1}}

3 个答案:

答案 0 :(得分:2)

从基本构建块开始,然后向上工作:

  • 初始化int变量不依赖于数组长度,因此它是O(1)。
  • (顺便说一下,当你想谈论O(n)时调用数组n是一个可怕的想法。这很容易引起混淆。)
  • 访问n.length需要一段时间。另一方面,如果n是链接列表或其他一些数据结构,则必须进一步分析它。
  • 访问n[i]需要一段时间。
  • System.out.println需要一段时间,因为它既不依赖于数组长度也不依赖于数组内容。
  • 增加int变量需要一段时间。
  • if语句最糟糕的是它的组件所采取的任何内容;在这种情况下,它是恒定的时间。
  • for循环在数组上线性迭代,因此它需要O(n.length),乘以O( for语句体内发生的任何内容 )。
  • 在这种情况下,这是O(n)* O(1)= O(n)。

答案 1 :(得分:0)

时间复杂度,如果O(n)(实际上,完全 n ),因为控制访问数组的所有n 元素。 (加上没有额外的条件来终止循环)

答案 2 :(得分:0)

您的最坏情况复杂性与其他情况没有区别。这是因为你的算法。它的运行时间完全取决于数组中的元素数量。您测试每个元素以满足条件,您拥有的元素越多,算法运行的时间就越长。

事实上很明显,时间复杂度 O(number_of_elements)。这意味着时间是线性的,取决于元素的数量。如果你拿两倍大的阵列,时间也会增加两倍。