Я прочитал эту статью:JavaScript быстрее сдвиг, unshift и сращивания реализация
https://gamealchemist.wordpress.com/2013/05/01/lets-get-those-javascript-arrays-to-work-fast/
В конце пункта 6 автор говорит:
Rq о сдвиге/unshift: берегитесь, это всегда операции O (n) (что означает: каждая операция будет занимать время пропорционально числу длины массива). Если вам это действительно не нужно, вы не должны использовать их . Скорее создайте свой собственный вращающийся массив, если вам нужна такая функция.
А в 7-м пункте:
Rq для сдвига/unshift пользователей: применить тот же принцип, с двумя индексами, чтобы избежать копирования/перераспределении. Один указатель слева, один справа на , начиная с середины массива. Затем вы снова будете в O (1) раз. Лучше. Не забудьте повторно центрировать индексы, когда они ==.
Мне было интересно, что означает автор, когда он говорит build your own rotating array
и two indexes,...One index on the left, one on the right, both starting at the middle of the array
. Как должны быть эти соображения переведены в код (автор не делает пример для этих случаев использования)?
Могут ли принципы применяться к shift
и unshift
также применимы к Array.prototype.splice
?
РЕДАКТИРОВАТЬ: У меня есть упорядоченный массив x
координат происходят из индексов 0
(более низких значений для x
) до n
(более высоких значений x
). Мне нужно будет использовать myArray.splice(index, 0, item);
несколько раз и вставить некоторые новые координаты x
между уже существующими, если эта координата <
более высокой и >
более низкой (я могу легко найти это через двоичный поиск), и я не знаю, t хочу, чтобы он менял порядок индексов каждый раз, когда я вызываю splice
. У меня есть тысячи элементов в массиве myArray
. Можно ли его улучшить, используя принципы, упомянутые автором связанной статьи?
Спасибо за внимание.
Ваша ссылка ведет в блог. Почему бы не задать вопрос непосредственно автору? –
Это действительно зависит от того, что вы хотите, чтобы конечный результат массива был и что такое ваша операция. Если вы хотите удалить элемент из массива и в итоге получить реальный последовательный массив с одним меньшим элементом в нем, то вы не найдете лучших альтернатив, кроме '.shift()' или '.splice()', потому что ваша цель является фактическое изменение массива. Если вы просто итерации через массив или хотите использовать какую-то структуру пользовательских данных, некоторые операции могут быть улучшены. Но это все, что нужно оптимизировать, чтобы соответствовать конкретной операции, а не что-то общее. – jfriend00
@VladimirSerykh Я знаю, это потому, что на этой странице нет никаких якорей, поэтому я не могу связать конкретные точки. – tonix