Почему сдвиг быстрее, чем доступ к индексу в этом примере JavaScript? - PullRequest
0 голосов
/ 31 января 2019
// Shifting the array and accessing 0
let sum = 0;
while(matrix.length > 0) {
  sum += matrix[0][0];
  matrix.shift();
}
// direct access
let sum = 0;
for (let i = 0; i < matrix.length; i++) {
  sum += matrix[i][0];
}

https://jsperf.com/shift-vs-index-access

Сдвиг массива и доступ к 0 быстрее, чем прямой доступ в приведенных примерах в приведенной выше ссылке jsPerf.

Разве shift() не O(n) операция?

1 Ответ

0 голосов
/ 31 января 2019

Нет, это не быстрее.Это просто твой эталон нарушается.Операция shift() очищает массив matrix, и после первой итерации вы сравниваете свои коды с пустым массивом.

Когда вы тестируете код, который изменяет структуру данных, вам нужно заново создатьструктура данных при каждом запуске теста. Я исправил ваш случай на jsperf.com и, как и ожидалось, shift медленнее (обратите внимание, что, вероятно, большая часть времени выполнения тратится на createMatrix, так что на самом деле это лот медленнее).

...