Найти в Дзене

Сложность списков в Python

Во многих языках программирования есть такая структура данных - массив. В Python это список. Все им пользуются он удобен и прост.

Основная суть данной структуры - последовательное хранение определенного набора элементов. Это как большая коробка, которая хранит в себе предметы поменьше.

list_example: list[int] = [1, 2, 3, 4]

Если брать память - то это набор ячеек в которые мы можем поместить какие-то данные. И вот тут как раз таки появляется проблема, о которой мало кто задумывается, используя списки.

Давайте представим, что наша память - это набор банковских ячеек в стене. Наш пример занял 4 ячейки. Пока мы что-то делали, кто-то занял следующую (5) ячейку. Мы решили, что нам мало элементов и решили добавить 5:

list_example.append(5)

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

Но у списка есть огромный плюс - произвольный доступ. Это значит, что я в любой момент могу максимально быстро получить любой элемент по его индексу. И списку не надо что то вычислять - он сразу знает где о лежит, потому что хранит ссылку на 1 ячейку и просто добавляет к ней индекс.

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

Подпишись на нас - будет много разборов интересного.
В телеграмм -
https://t.me/john_soi_blog
В дзене -
https://dzen.ru/john_soi_blog
Boosty -
https://boosty.to/dh_education/donate
VK -
https://vk.com/dh_ed