Помощь в учёбе, очень быстро...
Работаем вместе до победы

Оценка вычислительной сложности алгоритма

РефератПомощь в написанииУзнать стоимостьмоей работы

Разбиение на эти две группы связано с тем, что умножения работают дольше, чем сложения. На практике некоторые алгоритмы считаются предпочтительнее других, если в них меньше умножений, даже если число сложений при этом пропорционально возрастает. Для иллюстрации последующего вывода рассмотрим пример функции, которая трактуется как закон зависимости количества арифметических операций некоторого… Читать ещё >

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

Подсчет вычислительной сложности алгоритма состоит из двух основных шагов:

Шаг 1. Выбор значимой операции или группы операций.

Шаг 2. Определение, какие из выбранных операций содержатся в теле алгоритма, а какие составляют накладные расходы или уходят на регистрацию и учет данных.

В качестве значимых часто (но не обязательно) выступают операции двух типов:

  • · сравнение,
  • · арифметические операции.

Арифметические операции разбиваются на две группы:

  • · аддитивные,
  • · мультипликативные.

Аддитивные операторы (сложения) включают сложение, вычитание, увеличение и уменьшение счетчика.

Мультипликативные операторы (умножения) включают умножение, деление, взятие остатка по модулю.

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

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

Скорость роста алгоритма. Точное значение количества операций, выполненных алгоритмом, не играет существенной роли в его анализе, т.к. не является качественным показателем эффективности алгоритма. Более важной оказывается скорость роста этого числа при возрастании объема входных данных. Она называется скоростью роста алгоритма. Именно эта характеристика часто и фигурирует как оценка вычислительной сложности алгоритма.

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

Оценка вычислительной сложности алгоритма.

.

где — длина массива входных данных.

Если рассмотреть графики этих функций (рис. 1).

Рис. 1.

Рис. 1.

Например, на промежутке от 1 до 35, то становится очевидным, что несмотря на то, что функция:

Оценка вычислительной сложности алгоритма.

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

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

Некоторые часто встречающиеся функции приведены в таблице 1. Очевидно, что при небольших размерах входных данных значения функций отличаются незначительно, при росте этих размеров разница существенно возрастает. Поэтому существенным является поведение функции на больших объемах входных данных, поскольку на малых объемах принципиальная разница оказывается скрытой.

Таблица 1.

  • 1
  • 2
  • 5
  • 10
  • 15
  • 20
  • 30
  • 40
  • 50
  • 60
  • 70
  • 80
  • 90
  • 100
  • 0.0
  • 1.0
  • 2.3
  • 3.3
  • 3.9
  • 4.3
  • 4.9
  • 5.3
  • 5.6
  • 5.9
  • 6.1
  • 6.3
  • 6.5
  • 6.6
  • 1
  • 4
  • 25
  • 100
  • 225
  • 400
  • 900
  • 1600
  • 2500
  • 3600
  • 4900
  • 6400
  • 8100
  • 10 000
  • 1
  • 8
  • 125
  • 1000
  • 3375
  • 8000
  • 27 000
  • 64 000
  • 125 000
  • 216 000
  • 343 000
  • 512 000
  • 729 000
  • 1 000 000
  • 2
  • 4
  • 32
  • 1024
  • 32 768
  • 1 048 576
  • 1 073 741 824
  • 1 099 511 627 776
  • 1 125 899 906 842 620
  • 1 152 921 504 606 850 048
  • 1 180 591 620 717 409 992 704
  • 1 208 925 819 614 629 980 012 544
  • 12 379 400 392 853 800 549 967 986 688
  • 1 267 650 600 228 229 964 446 656 626 688

Для иллюстрации последующего вывода рассмотрим пример функции, которая трактуется как закон зависимости количества арифметических операций некоторого гипотетического алгоритма от размера входных данных :

Оценка вычислительной сложности алгоритма.

.

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

Определение. Говорят, что функции и связаны соотношением (или сравнимы):

(читается: функция есть О-большое от), если.

Оценка вычислительной сложности алгоритма.

.

Рассмотрим другой пример:

Оценка вычислительной сложности алгоритма.

.

Ясно, что скорость возрастания будет определяться первым слагаемым —, остальными слагаемыми при оценке скорости роста можно пренебречь. Кроме того:

Оценка вычислительной сложности алгоритма.

.

Из чего вытекает, что.

Оценка вычислительной сложности алгоритма.

.

Отбрасывая все младшие члены, скорость роста которых меньше, получаем порядок вычислительной сложности алгоритма. В предыдущем рассмотренном примере поскольку, то соответствующий гипотетический алгоритм имеет вычислительную сложность порядка .

Показать весь текст
Заполнить форму текущей работой