mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-17 01:06:07 +00:00
build
This commit is contained in:
@@ -19,7 +19,7 @@ comments: true
|
||||
|
||||
### 1. Инициализация списка
|
||||
|
||||
Обычно мы используем два способа инициализации: "без начальных значений" и "с начальными значениями":
|
||||
Обычно используются два способа инициализации: без начальных значений и с начальными значениями:
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -157,7 +157,7 @@ comments: true
|
||||
|
||||
### 2. Доступ к элементам
|
||||
|
||||
Список по своей сути является массивом, поэтому доступ к элементам и их обновление можно выполнять за $O(1)$ времени, что очень эффективно.
|
||||
Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и их обновление можно выполнять за $O(1)$ времени, что очень эффективно.
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -288,7 +288,7 @@ comments: true
|
||||
|
||||
### 3. Вставка и удаление элементов
|
||||
|
||||
По сравнению с массивами список позволяет свободно добавлять и удалять элементы. Добавление элемента в конец списка имеет временную сложность $O(1)$ , но операции вставки и удаления по-прежнему имеют ту же эффективность, что и у массива, то есть $O(n)$ .
|
||||
В отличие от массива список позволяет свободно добавлять и удалять элементы. Добавление элемента в конец списка имеет временную сложность $O(1)$ , но операции вставки и удаления по-прежнему имеют ту же эффективность, что и у массива, то есть $O(n)$ .
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -743,7 +743,7 @@ comments: true
|
||||
|
||||
### 5. Конкатенация списков
|
||||
|
||||
Если дан новый список `nums1` , мы можем присоединить его к хвосту исходного списка.
|
||||
Создав новый список `nums1` , мы можем присоединить его к хвосту исходного списка.
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -854,7 +854,7 @@ comments: true
|
||||
|
||||
### 6. Сортировка списка
|
||||
|
||||
После сортировки списка мы сможем применять алгоритмы "бинарный поиск" и "два указателя", которые очень часто встречаются в задачах по массивам.
|
||||
После сортировки списка мы сможем применять алгоритмы "двоичный поиск" и "два указателя", которые очень часто встречаются в задачах по массивам.
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -952,12 +952,12 @@ comments: true
|
||||
|
||||
## 4.3.2 Реализация списка
|
||||
|
||||
Во многих языках программирования списки встроены в стандартную библиотеку, например в Java, C++ и Python. Их реализация довольно сложна, а настройки параметров тщательно продуманы: начальная емкость, коэффициент расширения и так далее. Если тебе интересно, стоит заглянуть в исходный код.
|
||||
Во многих языках программирования списки встроены в стандартную библиотеку, например в Java, C++, Python и других языках. Их реализация довольно сложна, а настройки параметров тщательно продуманы: начальная емкость, коэффициент расширения и так далее. Если это интересно, стоит заглянуть в исходный код.
|
||||
|
||||
Чтобы лучше понять принцип работы списка, попробуем реализовать его упрощенную версию, в которой есть три ключевых аспекта проектирования.
|
||||
|
||||
- **Начальная емкость**: выбрать разумную начальную емкость внутреннего массива. В этом примере мы берем 10.
|
||||
- **Учет количества элементов**: объявить переменную `size` , которая будет хранить текущее число элементов в списке и обновляться в реальном времени при вставке и удалении элементов. С помощью этой переменной можно находить конец списка и понимать, требуется ли расширение.
|
||||
- **Учет количества элементов**: объявить переменную `size` , которая будет хранить текущее число элементов в списке и обновляться в реальном времени при вставке и удалении элементов. С помощью этой переменной можно определять конец списка и понимать, требуется ли расширение.
|
||||
- **Механизм расширения**: если при вставке элементов емкость списка исчерпана, нужно выполнить расширение. Для этого сначала создается больший массив с учетом коэффициента расширения, а затем все элементы текущего массива по порядку переносятся в новый. В этом примере мы считаем, что каждый раз массив расширяется в 2 раза.
|
||||
|
||||
=== "Python"
|
||||
|
||||
Reference in New Issue
Block a user