![](/img/trans.png)
[英]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.