假设您有算法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
,因此花费一半的时间。
答案 0 :(得分:3)
他们都是O(N)。常数因素根本不会影响复杂性(尽管它们可能会影响您在实践中选择的那个)。
为O(N)意味着对于某些k,算法的运行时间总是小于k * N
。 k
在不同情况下可能会有所不同。
所有O(N)告诉你的是,如果你把问题提高两倍,那么需要两倍的时间。 (对于O(N ** 2)而言,问题的两倍大会花费四倍的时间,等等。)
答案 1 :(得分:0)
显然他们是O(N)。但我想补充一点。
如果在编译时未定义initArray
,则甚至无法编写第一个代码块。
如果在编译时定义initArray
,则表示initArray是静态初始化的,仍然不需要像第一个代码块那样编写。
int score[]={0,0,0,0,0};
表示initArray.length
为5,更简洁。
所以大多数时候,像第一个块一样的代码可以避免。