Time complexity 计算big-O时如何处理本机函数的时间复杂性
我正在学习时间复杂性,并注意到我看到的教程没有考虑本机函数的时间复杂性(本例中为Javascript) 下面的函数用于删除数组中的重复值并返回排序后的数组,其时间复杂度为O(n),而不是O(n+nlogn)。O(n)正确吗?在计算时间复杂度时,我们是否应该考虑本机函数的时间复杂度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
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”并不是对所有语言都有一个公认的定义。为了得到准确的答案(而不仅仅是描述性地使用术语),需要定义什么是单个操作。