Все статьи и конспекты
АмортизацияМетод потенциаловVectorАнализ
2 мин чтение

Амортизационный анализ: Групповой, Банковский и Метод потенциалов

Глубокое изучение амортизационного анализа. Разбор 3 методов: агрегированный анализ, бухгалтерский учет (учет кредитов) и метод потенциальной функции Φ. Анализ динамического массива (std::vector) и двоичного счетчика.

Исходная заготовка: полнота объяснения и примеров ожидает редакторской проверки.

В чем суть амортизационного анализа?

В некоторых структурах данных отдельная операция может стоить очень дорого (например, O(N)O(N) при расширении массива std::vector), но происходит это настолько редко, что среднее время на операцию в последовательности из MM операций составляет O(1)O(1).

Амортизационный анализ гарантирует среднюю производительность каждой операции в худшем сценарии последовательности (в отличие от вероятностного анализа, здесь нет никаких случайных величин).

3 фундаментальных метода амортизационного анализа

1. Групповой метод (Aggregate Analysis)

Показываем, что суммарная стоимость последовательности из nn операций ограничена T(n)T(n). Тогда амортизированная стоимость одной операции:
c^=T(n)n\hat{c} = \frac{T(n)}{n}

Пример (Динамический массив): Копирование при переполнении происходит на шагах 1,2,4,8,16,…1, 2, 4, 8, 16, \dots.

T(n)=n+∑i=0⌊log⁡2n⌋2i=n+(2n−1)<3n  ⟹  c^=3nn=O(1)T(n) = n + \sum_{i=0}^{\lfloor \log_2 n \rfloor} 2^i = n + (2n - 1) < 3n \implies \hat{c} = \frac{3n}{n} = O(1)

2. Банковский метод (Accounting / Credit Method)

Каждой операции назначается учетная стоимость c^i\hat{c}_i.
  • Если c^i>ci\hat{c}_i > c_i (реальная стоимость), излишек c^i−ci\hat{c}_i - c_i кладется на «банковский счет» элемента в виде кредита;
  • Если c^i<ci\hat{c}_i < c_i, недостающая стоимость оплачивается накопленным ранее кредитом;
  • Баланс счета всегда должен оставаться ≥0\ge 0: ∑i=1nc^i≥∑i=1nci\sum_{i=1}^n \hat{c}_i \ge \sum_{i=1}^n c_i.
  • 3. Метод потенциалов (Potential Method)

    Определяется потенциальная функция Φ(D)\Phi(D), отображающая состояние структуры DD в действительное число R\mathbb{R} (с условием Φ(Di)≥Φ(D0)\Phi(D_i) \ge \Phi(D_0)).

    Амортизированная стоимость ii-й операции определяется как:

    c^i=ci+Φ(Di)−Φ(Di−1)=ci+ΔΦi\hat{c}_i = c_i + \Phi(D_i) - \Phi(D_{i-1}) = c_i + \Delta \Phi_i

    Сумма амортизированных стоимостей:

    ∑i=1nc^i=∑i=1n(ci+Φ(Di)−Φ(Di−1))=∑i=1nci+Φ(Dn)−Φ(D0)\sum_{i=1}^n \hat{c}_i = \sum_{i=1}^n (c_i + \Phi(D_i) - \Phi(D_{i-1})) = \sum_{i=1}^n c_i + \Phi(D_n) - \Phi(D_0)

    Что дальше?

    Вернитесь к обучению и выберите следующий материал.

    Изучено — к обучению →

    Отметка сохранится в этом браузере. Её можно отменить или снять кнопкой «Изучено».