为什么这个逻辑的运行时复杂度是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;
}
答案 0 :(得分:4)
Big O表示法是关于量级的顺序以及复杂性与元素数量的关系。 O(1/2 * n) == O(n)
答案 1 :(得分:3)
时间复杂度属于Time complexity categories之一:
O(N)
是您案例中复杂度O(N/2)
的一般近似值,因为1/2
被视为constant
(特别是考虑到N的高值)。
因此最终的复杂性被称为linear
(仅取决于N的值:最终执行时间与N线性增长)。
答案 2 :(得分:0)
理论上,我们感兴趣的是算法如何随着输入大小的增加而缩放,而常量不会在很大范围内影响其行为。
因此,即使您在案例中经历了数组O(1/2 * n)
的一半,理论上它仍然是O(n)
。