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

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

Характеристика Продолжительности, используя Большое о Примечание

Большое о примечание используется широко, чтобы характеризовать продолжительность и космические границы

с точки зрения некоторого параметра n, который варьируется от проблемы до проблемы, но всегда определяется как выбранная мера «размера» проблемы. Например, если мы интересуемся нахождением самого большого элемента во множестве целых чисел, как в arrayMax алгоритме, мы должны позволить n обозначить ряд элементов множества. Используя большое о примечание, мы можем написать следующее математически точное заявление о продолжительности алгоритма arrayMax для любого компьютера. Суждение 4.7: Алгоритм arrayMax, для вычисления максимального элемента во множестве n целых чисел, управляет в O (n) временем.

Оправдание: число примитивных операций, выполненных множеством алгоритма -

Макс в каждом повторении - константа. Следовательно, так как каждая примитивная операция бежит в постоянное время, мы можем сказать, что продолжительность алгоритма arrayMax на входе размера n является самое большее константой времена n, то есть, мы можем прийти к заключению, что продолжительность алгоритма arrayMax является O (n).

Некоторые свойства большого о примечания

Большое о примечание позволяет нам игнорировать постоянных множителей и условия более низкоуровневые и

внимание на главные компоненты функции, которые затрагивают ее рост. Пример 4.8: 5n4 + 3n3 + 2n2 + 4n + 1 O (n4).

Оправдание: Отметьте что 5n4 + 3n3 + 2n2 + 4n +1£ (5 + 3 + 2 + 4 + 1) n4 = cn4,

для c = 15, когда n ³ n0= 1.

Фактически, мы можем характеризовать темп роста любой многочленной функции. Суждение 4.9: Если f (n) является полиномиалом степени d, то есть,

f (n) = a0 + a1n + + adnd,

и объявление> 0, тогда f (n) - O (без обозначения даты).

Оправдание: обратите внимание на то, что, для n³ 1, у нас есть1£ n£ n2££ без обозначения даты; следовательно,

a0 + a1n + a2n2 + + adnd£ (a0 + a1 + a2 + + объявление) без обозначения даты.

Поэтому, мы можем показать, что f (n) является O (без обозначения даты), определяя c = a0 + a1 + + объявление и n0 = 1.

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

4.2. Анализ алгоритмов 169

Пример 4.10: 5n2 + 3n регистрируются, n + 2n + 5 является O (n2).

Оправдание: 5n2 + 3n регистрируют n + 2n +5£ (5 + 3 + 2 + 5) n2 = cn2, для c = 15, когда

n ³ n0= 2 (отмечают, что n регистрируют n, является нолем для n = 1). Пример 4.11: 20n3 + 10n регистрируются, n + 5 является O (n3).

Оправдание: 20n3 + 10n регистрируют n +5£ 35 n3, для n³ 1.

Пример 4.12: 3 регистрации n + 2 являются O (зарегистрируйте n).

Оправдание: 3 регистрации n +2£ 5 регистраций n, для n³ 2. Обратите внимание на то, что регистрация n является нолем для n = 1.

Именно поэтому мы используем n ³ n0= 2 в этом случае. Пример 4.13: 2n+2 O (2n).

Оправдание: 2n+2 = 2n22 = 4 2n; следовательно, мы можем взять c = 4 и n0 = 1 в этом

случай.

Пример 4.14: 2n + 100 регистраций n являются O (n).

Оправдание: 2n + 100 регистраций n102£ n, для n ³ n0= 2; следовательно, мы можем взять c = 102

в этом случае.

Характеристика функций в самых простых терминах

В целом мы должны использовать большое о примечание, чтобы характеризовать функцию как близко

как возможный. В то время как верно, что функция f (n) = 4n3 + 3n2 является O (n5) или даже O (n4), более правильно сказать, что f (n) является O (n3). Рассмотрите посредством аналогии, сценарий, где голодный путешественник, ведущий машину по длинной проселочной дороге, случайно встречает местного фермера, идущего домой с рынка. Если путешественник спрашивает фермера, насколько дольше он должен ездить, прежде чем он сможет найти немного еды, это может быть правдиво для фермера, чтобы сказать, «конечно, больше, чем 12 часов», но это намного более точно (и полезно) для него, чтобы сказать, «Вы можете найти рынок всего несколькими минутами езды эта дорога». Таким образом, даже с большим о примечанием, мы должны стремиться как можно больше сказать целую правду.

Это также считают плохим вкусом, чтобы включать постоянных множителей и условия более низкоуровневые в большом о примечании. Например, не модно сказать, что функция 2n2 является O (4n2 + 6n, регистрируют n), хотя это абсолютно правильно. Мы должны стремиться вместо этого описать функцию в большом о в самых простых терминах.

Семь функций, перечисленных в Разделе 4.1, являются наиболее распространенными функциями, используемыми вместе с большим о примечанием, чтобы характеризовать продолжительность и космическое использование алгоритмов. Действительно, мы, как правило, используем названия этих функций, чтобы относиться к продолжительности алгоритмов, которые они характеризуют. Так, например, мы сказали бы, что алгоритм, который бежит во время худшего случая 4n2 + n, регистрируется, n - квадратно-разовый алгоритм, так как это управляет в O (n2) временем. Аналогично, алгоритм, бегущий вовремя самое большее 5n + 20 регистраций n + 4, назвали бы линейно-разовым алгоритмом.