RokokoLite
@RokokoLite
Помешан на математике и анализе данных

Для кого операция добавления элемента в середину медленнее — для List или для LinkedList?

Проблема в том, что для LinkedList операция чтения O(n), вставки - O(1). Для List - операция чтения O(1), вставки - O(n). Получается, что скорость равна?
Сам вопрос из билетов по программированию, однако проблема в том, что сами преподаватели не хотят давать ответ на вопрос, а за ошибку обнуляется весь экзамен... Но на фоне других вопросов из списка подобных, эти рассуждения мне кажутся слишком громоздкими, что очень смущает меня
  • Вопрос задан
  • 164 просмотра
Решения вопроса 3
@Mercury13
Программист на «си с крестами» и не только
Если нужно искать точку, куда добавить (в LinkedList переместить итератор, в List переместить итератор ИЛИ отыскать индекс) — медленнее LinkedList из-за вопросов с кэшем.
Если точка уже имеется и она в середине — медленнее List, просто из-за асимптотической сложности.
Ответ написан

Получается, что скорость равна?

Нет, не равна.
Как минимум из-за того что big O показывает только характеристику, с которой растёт время.

Операция записи считается без чтения - в случае Linked List это значит, что мы пытаемся вставить, уже имея ссылку на нужный узел - нам не нужно тратить время на его поиск.

Чисто в теории, вставить элемент в середину большого Linked List будет дешевле, чем в середину большого List, тк в первом случае нам нужно будет выделить лишь небольшой кусочек памяти и поправить пару ссылок.

Во втором - придётся в худшем случае выделить кусок памяти побольше, чтобы уместились все данные и перекопировать весь список.

Конкретные числа для конкретных случаев скажет только бенчмарк.
Ответ написан
Комментировать
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
Проблема в том, что для LinkedList операция чтения O(n), вставки - O(1). Для List - операция чтения O(1), вставки - O(n). Получается, что скорость равна?
если n=1, умозрительно да...
.. ну а цена вопроса?... не? не слыхал?... я молчу по новые фишки распараллеливания... хотя и не знаю (пока) на сколько уместны...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы