Асимптотический анализ
Этот термин относится к анализу производительности алгоритма в предположении, что данные, с которыми работает алгоритм ( входные данные ), с точки зрения непрофессионала, «достаточно велики, чтобы их увеличение не повлияло на вывод». Хотя точный размер входа не требуется указывать (нам нужно только верхняя граница), набор данных , сам должен быть указан.
Обратите внимание, что до сих пор мы говорили только о методе анализа; мы не указали точно, какое количество мы анализируем (временная сложность? пространственная сложность?), и мы также не указали, какая метрика нас интересует (худший случай? лучший случай? средний?).
На практике термин асимптотический анализ обычно относится к верхней границе временной сложности алгоритма, т. Е. Производительности в наихудшем случае, измеренной общим временем выполнения, которое представлено обозначением big-Oh (например, может быть алгоритм сортировки O(nlogn)
).
Амортизированный анализ
Этот термин относится к анализу производительности алгоритма на основе определенной последовательности операций, нацеленной на наихудший сценарий, то есть амортизированный анализ подразумевает, что метрика является показателем наихудшего случая (хотя он по-прежнему не говорит, какое количество измеряется. ). Чтобы выполнить этот анализ, нам нужно указать размер ввода, но нам не нужно делать никаких предположений относительно его формы.
С точки зрения непрофессионала, амортизированный анализ выбирает произвольный размер для входных данных, а затем «проигрывает» алгоритм. Всякий раз, когда необходимо принять решение, зависящее от входных данных, выбирается худший путь ». После завершения работы алгоритма мы делим вычисленную сложность на размер входных данных, чтобы получить окончательный результат.
¹Примечание: Если быть точным, худший путь, который теоретически возможен . Если у вас есть вектор, размер которого динамически увеличивается вдвое каждый раз, когда его емкость исчерпывается, «худший случай» не означает, что он должен удваиваться при каждой вставке, потому что вставки обрабатываются как последовательность. Нам разрешено (и мы действительно должны) использовать известное состояние для математического исключения как можно большего количества «еще худших» случаев, даже если входные данные остаются неизвестными.
Самое главное отличие
Критическое различие между асимптотическим и амортизированным анализом состоит в том, что первый зависит от самих входных данных, а второй - от последовательности операций, которые алгоритм будет выполнять.
Следовательно:
- асимптотический анализ позволяет нам утверждать, что сложность алгоритма, когда ему дается лучший / худший / средний входные данные размером, приближающимся к N , ограничена некоторой функцией F (N) - где N - переменная
- Амортизированный анализ позволяет нам утверждать, что сложность алгоритма, когда ему на входе неизвестны характеристики, но известен размер N, не хуже, чем значение функции F (N), где N - известное значение