Изменения

Перейти к: навигация, поиск

Саморасширяющийся массив

22 байта добавлено, 14:27, 11 июня 2012
м
Стоимость операции add(x)
==== Метод предоплаты ====
[[Файл:Безымянный1.png|400px|thumb|right|Иллюстрация]]
Пусть у нас единицей стоимости операции является одна монетка. Тогда при каждой операции add(x), при которой нам не требуется копирование, мы будем использовать три монетки. Из них одна пойдёт на стоимость самой этой операции, а две будут в резерве (пусть, если мы добавили i-ый элемент, мы будем класть по одной монетке к элементам с номерами <tex>i</tex> и <tex>i-\frac{n}{2}</tex>). В итоге, к тому моменту, как массив будет заполнен, рядом с каждым элементом будет лежать по одной монетке, которую мы и можем использовать на его копирование в новый массив. Таким образом, амортизационная стоимость каждой операции add(x) — <tex>3</tex>, и среднее время её работы — <tex>O(1)</tex>.
==== Метод потенциалов ====
2) Массив расширяется: <tex> a_i = t_i + \Phi(2c, s + 1) - \Phi(c, s) = (s + 1) + 2 - s = 3 </tex>
В итоге, средняя стоимость операции add(x) — <tex>3</tex>, а среднее время работы — <tex>O(1)</tex>.
=== Стоимость операции del(x) ===
355
правок

Навигация