Що таке амортизований аналіз? І як це може допомогти мені досягти найгірших гарантій ефективності в моїх програмах?
Я читав, що наступні методи можуть допомогти програмісту домогтися найгірших гарантій ефективності (тобто, моїми власними словами: гарантія, що час роботи програми не перевищить час роботи в гіршому складі):
- Рандомізовані алгоритми (наприклад, алгоритм кварцового коси є квадратичним у гіршому випадку, але випадкове впорядкування введення дає ймовірні гарантію того, що його час роботи лінійноактичний)
- Послідовність операцій (наш аналіз повинен враховувати як дані, так і послідовність операцій, які виконує клієнт)
- Амортизований аналіз (ще один спосіб надання гарантії ефективності - це амортизація витрат шляхом відстеження загальної вартості всіх операцій, поділеної на кількість операцій. У цьому налаштуванні ми можемо дозволити деякі дорогі операції, зберігаючи середню вартість Іншими словами, ми розподіляємо вартість декількох дорогих операцій, присвоюючи частину їх кожній із великої кількості недорогих операцій)
Автор згадував про використання змінної структури даних масиву для Stack як один із прикладів того, як досягти амортизованого аналізу, але я досі не розумію, що таке амортизований аналіз, і як його можна реально реалізувати (структура даних - алгоритм?) Для досягнення гіршого -гарантії виконання