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

Time complexity 计算big-O时如何处理本机函数的时间复杂性,time-complexity,big-o,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.l

我正在学习时间复杂性,并注意到我看到的教程没有考虑本机函数的时间复杂性(本例中为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);
}
函数唯一排序(arr){
常量存储={};
常量结果=[arr[0]];
for(设i=0;ia-b);
}
O(n)正确吗

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

您提供的函数片段将是O(n+nlog(n)),因为存在循环数组的操作(O(n))以及使用javascript的本机函数nlog(n)进行排序的操作

通常,在Big-O表示法中,我们仅根据函数的最慢操作对其进行分类,因此您也可以将函数描述为O(nlogn)

“大O”并不是对所有语言都有一个公认的定义。为了得到准确的答案(而不仅仅是描述性地使用术语),需要定义什么是单个操作。