for loop
var cars =[
{'toyota' : 'corolla', 'honda' : 'civic'},
{'toyota' : 'corolla1', 'honda' : 'civic1'},
{'toyota' : 'corolla2', 'honda' : 'civic2'},
{'toyota' : 'corolla3', 'honda' : 'civic3'},
];
var names = []; //names = 1, [] = 1
for(var i=0; i< cars.length; i++) { // for = 1 , var i = 1, =0 = 1, < = 1, cars.length = 1, i++ = 1
names.push(cars[i].toyota); //names = 1, push = 1, cars[i] = 1, toyota = 1
}
console.log(names); has an array access and then a printing to the console, so thats 2 operations
total = 14
map method js
var cars =[
{'toyota' : 'corolla', 'honda' : 'civic'},
{'toyota' : 'corolla1', 'honda' : 'civic1'},
{'toyota' : 'corolla2', 'honda' : 'civic2'},
{'toyota' : 'corolla3', 'honda' : 'civic3'},
];
var mapValues = cars.map(function(animal){ //mapvalues = 1, cars = 1, map= 1, function= 1
return animal.toyota; //return = 1, animal = 1, toyota = 1
});
console.log(mapValues); // has an array access and then a printing to the console, so thats 2 operations
total = 9
答案 0 :(得分:1)
你算“操作”的方式实际上是任意的:其中一些比其他人“花费”更多。
例如,您将i++
计为一个操作,但有人可能会说它包含5个操作:
......然后仍然没有迹象表明哪些操作比其他操作更昂贵。这种比较不同算法的方法不会带给你太多。
计算时间和空间复杂度的重要因素是次序。想象一下cars.length
不是4,而是100万。然后,循环外的操作是4,6,9,11,真的并不重要......重要的是,无论输入数组是小还是大,这些操作的数量都是相同的。因此它们表示常量操作数,即它们具有 O(1)时间复杂度。
循环也是如此。它大约是一个数量级。如果循环体具有4或5个操作,则这意味着完整循环的操作总数为 4n 或 5n 。在这两种情况下,数量级都是 n (与n²或 nlogn ,...相反)。在谈到时间和空间的复杂性时,这就是重要的。
因此,总之,旧的for
循环和数组方法(如map
,forEach
,reduce
,......)的时间复杂度为为O(n)