Какова временная сложность получения последнего индекса для массива?

array = ["A", "B", "C", "D"]

для данного массива требуется O(1), чтобы указать на первый индекс, равный 0. Поэтому, если я наберу array[0], потребуется O(1), чтобы указать на "A". Но если я напишу array[-1], который указывает на последний индекс 3. Будет ли он перебирать весь массив, чтобы получить последний индекс, или он знает, что массив заканчивается на индексе 3 по умолчанию? Другими словами, как массив [-1] реализован в python?

Это не массив, это список.

Jared Smith 30.01.2019 03:21

Чтение это

Sheldore 30.01.2019 03:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
1 831
2

Ответы 2

Нативные списки Python представляют собой массивы указателей, и доступ к любому элементу осуществляется за O(1).

Обратите внимание, что это деталь реализации, относящаяся к стандартной реализации Python, известной как CPython. Реализации других языков могут реализовывать списки иначе.

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

ananya 30.01.2019 03:23

Список знает свою длину, поэтому доступ к элементам по отрицательному индексу тривиален.

kindall 30.01.2019 03:41

Доступ к любому элементу массива осуществляется в постоянное время, поскольку он известен по ячейке памяти (т.е. по указателю).

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

Обновлено благодаря комментариям.

array[-x] является синтаксическим сахаром для array[len(lst) - x]. Так что это по-прежнему простой постоянный доступ к указателю и не требует времени.

Вы можете увидеть этот ответ для получения дополнительной информации. Пока речь идет о C, концепции должны быть одинаковыми.

lst[-x] является синтаксическим сахаром для lst[len(lst) - x].
Primusa 30.01.2019 03:23

Спасибо. Это очень помогло. Я также не знал, что len() занимает O(1)

ananya 30.01.2019 03:36

@ananya: Если вы знаете C++, вы можете думать о list Python как об эквиваленте std::vector или для Java как о ArrayList. Это просто имя Python для массива с динамическим размером. Несмотря на название, это не связанный список.

ShadowRanger 30.01.2019 03:57

Другие вопросы по теме