大O时间复杂性有效等价的陈述

时间:2013-09-08 10:50:46

标签: java for-loop big-o time-complexity assignment-operator

假设您有算法1(将实例化数组中的每个元素初始化为0):

intArray[0] = 0;
intArray[1] = 0;
...
intArray[intArray.length - 1] = 0;

和算法2:

for( int i = 0; i < intArray.length; i++)
     intArray[i] = 0;

他们的时间复杂性是否相等?我被教导要考虑比较和分配,在我看来,算法1比算法2的比较少intArray.length,因此花费一半的时间。

2 个答案:

答案 0 :(得分:3)

他们都是O(N)。常数因素根本不会影响复杂性(尽管它们可能会影响您在实践中选择的那个)。

为O(N)意味着对于某些k,算法的运行时间总是小于k * Nk在不同情况下可能会有所不同。

所有O(N)告诉你的是,如果你把问题提高两倍,那么需要两倍的时间。 (对于O(N ** 2)而言,问题的两倍大会花费四倍的时间,等等。)

答案 1 :(得分:0)

显然他们是O(N)。但我想补充一点。

如果在编译时未定义initArray,则甚至无法编写第一个代码块。

如果在编译时定义initArray,则表示initArray是静态初始化的,仍然不需要像第一个代码块那样编写。

int score[]={0,0,0,0,0};

表示initArray.length为5,更简洁。

所以大多数时候,像第一个块一样的代码可以避免。