[英]Why simple factorial algorithms in JS are much faster than in Python or R?
[英]Why is one of the following algorithms faster than the other if you do more processing?
function reverseString(str) {
let newStr = ''
for (let i = (str.length - 1); i >= 0; i--) {
newStr += str[i]
}
return newStr
}
// This algorithm is faster
function reverseString2(str) {
str = str.split('')
let left = 0
let right = str.length - 1
while (left < right) {
const tmp = str[left]
str[left] = str[right]
str[right] = tmp
left++
right--
}
return str.join('')
}
如果reverseString
进行更多处理,将字符串转换为数组然后连接整个数组,为什么 reverseString2 比reverseString2
快? 优点是主要算法是 O(n/2),但 rest 是 O(n)。 为什么会这样?
结果如下:
字符串大小: 20000000
反向字符串: 4022.294ms
反向字符串2: 1329.758ms
提前致谢。
在第一个 function reverseString()
中,发生的事情是循环运行了“n”次。 这里的“n”表示字符串的长度。 您可以看到您正在执行循环 n 次以获取反转的字符串。 所以这个 function 花费的总时间取决于“n”的值。
在第二个 function reverseString2()
中,while 循环仅运行 n/2 次。 当您查看left
和right
变量时,您可以理解这一点。 对于循环的一次执行, left
变量增加 1, right
变量减少 1。因此您一次进行 2 次更新。 所以对于一个 n 长度的字符串,它只执行 n/2 次。
虽然第二个 function 中的语句要多得多,但它们的执行时间比第一个 function 中的语句要少得多。 因此 function reverseString2()
更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.