|
|
Строка 1: |
Строка 1: |
− | {{Определение
| + | #перенаправление [[Динамический массив]] |
− | | definition =
| |
− | Массив - структура данных,набор однотипных переменных доступ к которым осуществляется по индексу.
| |
− | }}
| |
− | | |
− | Для массива с увеличением/уменьшением размера возможно выполнение следующих операций:
| |
− | *Add(x) - добавление элемента в конец массива
| |
− | *Set(i,x)- присвоение i-му элементу значение х
| |
− | *Get(i) - значение i-го элемента
| |
− | *Del - удаление последнего элемента массива
| |
− | | |
− | == Операции с массивом ==
| |
− | ===Add===
| |
− | Добавляет в конец массива элемент X. Если размер массива превышен, то выполняется операция расширения массива. Время выполнения операции в худшем случае O(n)
| |
− | ===Set===
| |
− | В i-ую ячейку массива, записывается значение X. Время выполнения O(1)
| |
− | ===Get===
| |
− | Возвращает значение i-ой ячейки массива. Время выполнения O(1)
| |
− | | |
− | ===Del===
| |
− | Удаляет последний элемент массива. В случае если кол-во элементов в массиве в С раз меньше его длины то происходит сжатие в B раз. (С,B-константы, зависящие от метода реализации массива) Время выполнения операции в худшем случае O(n)
| |
− | | |
− | ==Амортизационная стоимость каждой операции==
| |
− | Пусть наш массив расширяется в 2 раза, и уменьшается в 2 раза, когда длина массива в 4 раза больше кол-ва элементов в массиве. В этом случае амортизационная стоимость каждой операции будет O(1). Докажем это используя метод предоплаты:
| |
− | | |
− | ===Расширение массива===
| |
− | При каждом добавлении элемента одну монетку будем тратить на добавление самого элемента, будем класть по 1 монетке на ячейку в которую добавили, и по 1 монетке на ячейку стоящую на n/2 позиции раньше текущей. В этом случае при каждом расширении гарантируется что на каждой ячейке имеется хотя бы одна монета.
| |
− | ===Сужение массива===
| |
− | В случае с удаление ячейки будем действовать по схожей стратегии. 1 монетку на удаление, 1 монетку на элемент стоящий на позиции i-n/4, и 1 монетку на текущий элемент (точнее на его могилку после удаления). При это даже в самом худшем случае (только что расширились а потом n/4 раза удалили) у нас будет хватать денег на сужение.
| |