反转数组的运行时复杂度?

时间:2017-03-24 14:49:56

标签: java time-complexity

为什么这个逻辑的运行时复杂度是O(N)?迭代次数只有一半。请解释一下!

for(int i = 0; i < validData.length / 2; i++)
{
    int temp = validData[i];
    validData[i] = validData[validData.length - i - 1];
    validData[validData.length - i - 1] = temp;
}

3 个答案:

答案 0 :(得分:4)

Big O表示法是关于量级的顺序以及复杂性与元素数量的关系。 O(1/2 * n) == O(n)

答案 1 :(得分:3)

时间复杂度属于Time complexity categories之一:

  • 常数(O(1))
  • 对数(O(log(N)))
  • 线性(O(N))
  • 二次方(O(N ^ 2))
  • 立方(O(N ^ 3))
  • 等...

O(N)是您案例中复杂度O(N/2)的一般近似值,因为1/2被视为constant(特别是考虑到N的高值)。

因此最终的复杂性被称为linear(仅取决于N的值:最终执行时间与N线性增长)。

答案 2 :(得分:0)

理论上,我们感兴趣的是算法如何随着输入大小的增加而缩放,而常量不会在很大范围内影响其行为。

因此,即使您在案例中经历了数组O(1/2 * n)的一半,理论上它仍然是O(n)