Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
оценка сложности алгоритмов.doc
Скачиваний:
22
Добавлен:
10.07.2019
Размер:
353.28 Кб
Скачать

Билет 27

Полиномиальные и экспоненциальные алгоритмы.

Самыми лучшими являются линейные алгоритмы, имеющие сложность порядка an=b. Они называются также алгоритмами порядка O(n) где n – размерность входных данных. Такие алгоритмы действительно существуют. Например, сложение двух чисел столбиком в случае, если одно из них состоит из n, а другое – из m цифр требует не более max(n, m) сложений и не более max(n, m) запоминаний. Т.е. данный алгоритм имеет сложность порядка O(n+m). Разумеется, это выражение показывает только порядок величины – постоянные факторы в нем не учитываются.

Обобщение линейности дает нам первый большой класс алгоритмов – полиномиальных.

Полиномиальным (или алгоритмом полиномиальной временной сложности) называется алгоритм, у которого временная сложность есть O(p(n)), где p(n) – полином от n. Задачи, для решения которых известен алгоритм, сложность которого составляет полином заданной, постоянной и не зависящей от размерности входной величины n степени, называют “хорошими” и относят их к классу P.

Экспоненциальной по природе считается задача, сложность которой не менее порядка , где x – константа или полином от n. Например, это задачи, в которых возможное число ответов уже экспоненциально. В частности, к ним относятся задачи, в которых требуется построить все подмножества заданного множества или все поддеревья заданного графа. Экспоненциальные задачи относят к классу E.

Соответственно и алгоритмы, в оценку сложности которых n входит в показатель степени, относятся к экспоненциальным.

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

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

Пусть имеется пять алгоритмов со сложностями:

Алгоритм

Сложность

O(n)

O( )

O( )

O( )

O( )

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

Алгоритм

Максимальный размер задачи

1 с

1 мин

1 час

1000

140

4893

31

244

1897

10

39

153

9

15

21

Предположим, что разработана машина, работающая в 10 раз быстрее. Тогда увеличение размера задач, решаемых за то же время:

Алгоритм

Максимальный размер задачи

до ускорения

после ускорения

10

10 для больших

3.16*

2.15*

+3.3

Для большей убедительности и сравнения полиномиальных и экспоненциальных алгоритмов приведём таблицу, где единица времени – 1 мкс, а сложность совпадает с необходимым количеством единиц времени для обработки набора n данных:

Сложность

Размер задачи – n

10

20

30

40

50

60

n

0.00001 с

0.00002 c

0.00003 c

0.00004 c

0.00005 c

0.00006 c

0.0001 c

0.0004 c

0.0009 c

0.0016 c

0.0025 c

0.0036 c

0.001 c

0.008 c

0.027 c

0.064 c

0.125 c

0.216 c

0.1 c

3.2 c

24.3 c

1.7 мин

5.2 мин

13.0 мин

0.01 c

1.0 c

17.9 мин

12.7 дней

35.7 лет

366 веков

0.59 с

58 мин

6.5 лет

3855 веков

веков

веков

Приведённые таблицы иллюстрируют причины, по которым полиномиальные алгоритмы считаются более предпочтительными, чем экспоненциальные.