找到for循环有14个操作,map方法有9个操作

时间:2017-05-26 16:00:07

标签: javascript algorithm reactjs time-complexity space-complexity

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

1 个答案:

答案 0 :(得分:1)

你算“操作”的方式实际上是任意的:其中一些比其他人“花费”更多。

例如,您将i++计为一个操作,但有人可能会说它包含5个操作:

  • 阅读i
  • 的值
  • 将该值保留在内存中
  • 计算i + 1
  • 使用该计算值更新i
  • 返回记忆值

......然后仍然没有迹象表明哪些操作比其他操作更昂贵。这种比较不同算法的方法不会带给你太多。

计算时间和空间复杂度的重要因素是次序。想象一下cars.length不是4,而是100万。然后,循环外的操作是4,6,9,11,真的并不重要......重要的是,无论输入数组是小还是大,这些操作的数量都是相同的。因此它们表示常量操作数,即它们具有 O(1)时间复杂度。

循环也是如此。它大约是一个数量级。如果循环体具有4或5个操作,则这意味着完整循环的操作总数为 4n 5n 。在这两种情况下,数量级都是 n (与 nlogn ,...相反)。在谈到时间和空间的复杂性时,这就是重要的。

因此,总之,旧的for循环和数组方法(如mapforEachreduce,......)的时间复杂度为为O(n)