Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

166 Глава 4. Аналитические инструменты

Сосредоточение на худшем случае

Анализ среднего случая обычно требует, чтобы мы вычислили ожидаемую продолжительность

основанный на данном входном распределении, которое обычно включает сложную теорию вероятности. Поэтому, для остатка от этой книги, если мы не определяем иначе, мы характеризуем продолжительность с точки зрения худшего случая, как функция входного размера, n, алгоритма.

Анализ худшего случая намного легче, чем анализ среднего случая, поскольку это требует только способности определить вход худшего случая, который часто прост. Кроме того, этот подход, как правило, приводит к лучшим алгоритмам. Создание стандарта успеха для алгоритма, чтобы выступить хорошо в худшем случае обязательно требует, чтобы это преуспело на каждом входе. Таким образом, проектирование для худшего случая приводит к более сильным алгоритмическим «мышцам», во многом как звезда следа кто всегда методы, увеличивая наклонную поверхность.

4.2.3 Асимптотическое примечание

В целом, каждый основной шаг в псевдокодовом описании или языке высокого уровня

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

В анализе алгоритма мы сосредотачиваемся на темпе роста продолжительности как функция входного размера n, проявляя подход «большой картины». Это достаточно часто только, чтобы знать, что продолжительность алгоритма, такого как arrayMax, показанный в Кодовом Фрагменте 4.1, растет пропорционально до n с его истинной продолжительностью, являющейся n времена постоянный множитель, который зависит от определенного компьютера.

Мы анализируем алгоритмы, используя математическое примечание для функций это disre-gards постоянные множители. А именно, мы характеризуем продолжительность алгоритмов при помощи функций, которые наносят на карту размер входа, n, к ценностям, которые соответствуют основному фактору, который определяет темп роста с точки зрения n. Этот подход позволяет нам сосредотачиваться на аспектах «большой картины» продолжительности алгоритма. Алгоритм arrayMax (A, n):

Вход: множество хранение n³ 1 целое число.

Продукция: максимальный элемент в A.

currMax ¬[0]

поскольку я¬ 1 к n- 1 делаю

если currMax <[я] тогда

currMax ¬[я]

возвратите currMax

Кодовый Фрагмент 4.1: Алгоритм arrayMax.

Продолжительность 4.2. Анализ алгоритмов 167

«Большое о» примечание

Позвольте f (n) и g (n) быть функциями, наносящими на карту неотрицательные целые числа к действительным числам. Мы говорим, что f (n) является O (g (n)), если есть реальный постоянный c> 0 и постоянное целое число

n0 ³ 1, таким образом, что

f (n)£ cg (n), для n ³ n0. Это определение часто упоминается как «большое о» примечание, поскольку это иногда

объявленный как «f (n) большой об из g (n)». Альтернативно, мы можем также сказать «f (n), заказ g (n)». (Это определение иллюстрировано в рисунке 4.5.)

cg (n)

f (n)

n0

Входной размер

Рисунок 4.5: «большое о» примечание. Функция f (n) является O (g (n)), с тех пор f (n)£

c g (n), когда n ³ n0.

Пример 4.6: функция 8n- 2 является O (n). Оправдание: По большому об определению мы должны найти реальный постоянный c> 0 и целое число постоянный n0 ³ 1 таким образом что 8n-2£ cn для каждого целого числа n № n0. Это легко

видеть, что возможный выбор - c = 8 и n0 = 1. Действительно, это - один из бесконечно

много выбора, доступного, потому что любое действительное число, больше, чем или равный 8 работам для c и любому целому числу, больше, чем или равный 1 работе для n0.

Большое о примечание позволяет нам говорить, что функция f (n) «меньше чем или равна

к» другой функции g (n) до постоянного множителя и в асимптотическом смысле как n

растет к бесконечности. Эта способность прибывает из факта, что определение использует «£»

сравнить f (n) с g (n) времена константа, c, для асимптотических случаев когда n ³ n0.

168