Изменения

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

Амортизационный анализ

250 байт добавлено, 20:33, 13 мая 2014
Динамические хэш-таблицы
Теперь рассмотрим все возможные случаи для каждой из операций <tex>\mathrm{add},\ \mathrm{remove},\ \mathrm{find}</tex>.
#<tex>\mathrm{add}{}</tex>: <tex>\, n</tex> увеличивается на единицу. Следовательно, возникают три случая:
#*<tex dpi = "150"> \alpha < \alpha_{max} </tex>: потенциал увеличивается на <tex>(2 \cdot (n + 1) - \alpha_{max} \cdot m) - (2 \cdot n - \alpha_{max} \cdot m) = 2</tex>, следовательно амортизированное время {{---}} <tex>1 + 2 = 3</tex>.#*<tex dpi=150>\alpha = \alpha_{max}</tex>: таблица увеличивается в размере, так что реальная сложность {{---}} <tex> 1 + m </tex>. Но с учётом изменения потенциала амортизированная стоимость составит <tex dpi=150>1 + m + 2 \cdot |\alpha_{max} \cdot m + 1 - \genfrac{}{}{}{}{2 \cdot \alpha_{max} \cdot m}{2}| - 2 \cdot |\alpha_{max} \cdot m - \genfrac{}{}{}{}{\alpha_{max} \cdot m}{2}| = 3 </tex>
#<tex>\mathrm{find}{}</tex>: Рассмотрим два случая:
#* Элементы распределяются по таблице достаточно равномерно: время поиска элемента в списке {{---}} <tex>O(1)</tex>, потенциал не изменяется, следовательно и реальная, и амортизированная сложности {{---}} <tex>1</tex>.
#* В случае, если все элементы оказываются размещены в одном списке, время поиска элемента достигает <tex>O(n)</tex>. Это время может быть улучшено до <tex>O(\log n)</tex>, если вместо списков использовать сбалансированные деревья поиска (например, в <tex>\mathrm{Java\ 8}{}</tex> ввели двоичные деревья для стандартной коллекции <tex>\mathrm{HashSet}{}</tex>).
#<tex>\mathrm{remove}{}</tex>: <tex> n</tex> уменьшается на единицу. Потенциал уменьшается на <tex> -((2 \cdot n - \alpha_{max} \cdot m) - (2 \cdot (n + 1) - \alpha_{max} \cdot m)) = 2 </tex>, и амортизированное время <tex> 1 - 2 = -1 </tex>.
В каждом случае амортизированное время одной операции в среднем случае {{---}} <tex>O(1)</tex>, в худшем случае {{---}} <tex>O(n)</tex>.
Если мы создадим нашу таблицу так, что <tex dpi = "150">\alpha = \genfrac{}{}{}{}{1alpha_{max}}{2}</tex>, то изначально потенциал будет равен нулю. И так мы будем знать, что потенциал никогда не станет меньше этого значения; в итоге амортизированная стоимость будет верхней границей реальной оценки. Следовательно, сложность последовательности из <tex>n</tex> операций в среднем случае будет равна <tex>O(n)</tex>.
==Метод предоплаты==
Анонимный участник

Навигация