Сложность операций с массивами

0

Таким образом, одна из тем в моем классе comp sci связана с временной сложностью и использованием массивов и связанных списков в качестве хорошего способа сравнения определенных операций и того, что лучше для этого контейнера, поэтому вы можете выбрать подходящую структуру данных. Я понимаю причины большинства операций, но я не уверен в одном, и это вставка и добавление в массив.

Наихудший сценарий для обоих из них - O (n). Я считаю, что я понимаю, почему вставка - это O (n), потому что худший случай, вы вставляете на передний план, заставляя вас переместить все элементы вправо, что означает его линейность и зависит от количества элементов в массиве. Для добавления мне было любопытно, почему это не O (1), так как он принимает одну операцию независимо от размера, чтобы добавить элемент в конце, учитывая, что есть место.

Это проблема, если недостаточно места, вам нужно скопировать массив в более крупный для своего худшего сценария?

Теги:
arrays
time-complexity

2 ответа

1
Лучший ответ

[...] Если пространства недостаточно, вам нужно скопировать массив в более крупный для своего худшего сценария?

Бинго.

0

Типичный массив - это кусок смежной памяти с определенным размером, который определяется либо во время компиляции, либо во время выполнения. Нет такой вещи, как удаление или вставка элементов в массив, а просто запись в уже выделенную память.

Связанный список - это несмежный набор фрагментов памяти, которые связаны их адресами. Существует такая вещь, как удаление и вставка элементов в связный список.

Преимущества массива над связанным списком - это более простой обход и компактность (дополнительная память для хранения адреса следующего [или предыдущего] элемента не требуется). Однако, в отличие от связанного списка, это не может быть продлено так же легко.

Тем не менее, чтобы более точно рассказать о временных сложностях алгоритмов, присущих структуре данных, нам нужно сначала определить структуру данных.

Сопряженные списки? Сохраняем ли мы адреса первого и последнего элементов (например, очереди)? Двоичные деревья (которые являются типом связанного списка)?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню