哪段代码更快
数字1:
for(var i = 0; i<50; i++){
//run code in here
}
for(var i = 0; i<50; i++){
//run more code in here
}
或数字2:
for(var i = 0; i<100; i++){
//run all the code in here
}
谢谢!
答案 0 :(得分:2)
正如在另一个答案中已经指出的那样,两个循环都产生相同的O( N )缩放行为(无论循环主体中发生什么以及缩放循环长度50和100,分别。该点通常是幂项( c 。 X N )的比例因子。>
在许多用于与性能相关的计算的实际CPU系统上,通常都有用于在循环内操作的数据的缓存和管道。然后,问题的答案取决于循环体的详细信息(循环中读取/写入的所有数据是否都将放入某个级别的缓存中,或者第二个50循环会丢失所有现有的缓存值,并从中检索数据再次记忆?)。此外,分支预测(对循环出口/重复分支以及循环内部分支预测)的推测对实际性能有复杂的影响。
这是计算科学的专属部分,它准确地考虑了所有相关细节。应该分析具体的示例(循环实际上做什么?)以及之前的whether this loop is actually relevant。
尽管如此,一些启发式方法可能还是有帮助的:
如果i
是一个迭代器(而不仅仅是重复计数器),则两个1..50循环可能正在处理同一数据。
如果两个循环体都可以处理每个元素(仅当第二个循环与第一个循环之后的其他元素的状态之间没有依赖关系时才起作用),通常每个索引仅处理一次更为有效。 / p>
答案 1 :(得分:1)
这取决于它们内部的逻辑(嵌套循环等)。从理论上讲,它们都是一样的,因为它们都是线性的。 (两者都是100次迭代)。因此,大O时间复杂度为O(N),其中N是循环的大小。