计算big-O时如何处理本机函数的时间复杂度

时间:2019-06-03 23:15:19

标签: time-complexity big-o

我正在学习时间复杂性,并注意到我所看到的教程并未考虑本地函数的时间复杂性(此示例中的Javascript)

下面的函数将删除数组中的重复值并返回排序后的数组,其时间复杂度为O(n)而不是O(n + nlogn)。 O(n)是否正确?计算时间复杂度时,是否应该考虑本机函数的时间复杂度?

function uniqueSort(arr) {
    const store = {};
    const result = [arr[0]];

    for(let i =0; i < arr.length; i++) {
        if(!store[arr[i]]) {
            result.push(arr[i]);
            store[arr[i]] = true;
        }
    }
    return result.sort((a,b) => a - b);
}

1 个答案:

答案 0 :(得分:0)

  

O(n)正确吗?

O(N)不正确。在评估函数的时间复杂度时,必须逐行考虑函数中所有操作的时间复杂度,包括本机函数的时间复杂度。如果您要做的只是在自己的函数内部调用各种本机函数(可能会非常昂贵!),则调用函数O(1)并没有多大意义。

您提供的摘录功能为O(n + nlog(n)),因为存在循环遍历数组(O(N))的操作以及使用javascript本地函数nlog( n)。

通常,我们通常以最慢的操作对函数进行分类,因此您也可以将函数描述为O(nlogn)。