Java 阵列反转的运行时复杂性?

Java 阵列反转的运行时复杂性?,java,time-complexity,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; } for(int i=0;i

为什么这个逻辑的运行时复杂性是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;
}
for(int i=0;i
大O表示法是关于数量级以及复杂性与元素数量的关系
O(1/2*n)==O(n)

我们感兴趣的是,在理论上,算法如何随着输入大小的增长而扩展,并且常数不会在很大范围内影响其行为


因此,在您的情况下,即使您要处理一半的数组
O(1/2*n)
,理论上它的时间复杂度仍然是
O(n)

以下之一:

  • 常数(O(1))
  • 对数(O(对数(N)))
  • 线性(O(N))
  • 二次(O(N^2))
  • 立方(O(N^3))
  • 等等
O(N)
是复杂性
O(N/2)
的一般近似值,因为
1/2
被视为一个
常数(特别是考虑到N的高值)


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

复杂度随元素数量线性增长。如果你加倍
N
,你的迭代次数就会加倍。实际上,这与“数量级”无关。