这个函数的时间复杂度是O(1)吗?

use*_*383 4 algorithm big-o time-complexity

我今天正在审查有关算法的一些旧笔记,这让我思考.

复杂性O(1)意味着函数的执行时间与数据无关.

所以我们假设我们有一个函数来添加数组中的所有元素.

int add(int[] array){
    int sum =0;
    for (int i=0;i<ARRAY_MAX_SIZE;i++){
      sum= sum + (i<array.length?array[i]:0);
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

其中ARRAY_MAX_SIZE是数组的最大可能大小.我知道这段代码效率不高,我不想讨论这个问题.但是+每次调用运算符的时间相同,并且不受数据大小的影响.

这是否意味着此功能的复杂性是O(1)?

Ami*_*mit 6

是.O(1)表示恒定时间,而不是快速/有效/最佳.

Big-O复杂性忽略了常量步骤的复杂性.除法(慢)与增量(快)一样"复杂".