43
употребляют такие выражения: «трудоемкость алгоритма есть O(g(n))» или
«алгоритм решает задачу за время O(g(n))». Если трудоемкость не зависит от
объема исходных данных, то для ее обозначения используется символ О(1).
Алгоритм трудоемкости О(п) называют линейным. Алгоритм трудоемкости
О(п
b
), где b – константа (возможно, дробная), называется полиномиальным.
Если g(n) является показательной функцией, например 2
п
, то говорят, что
алгоритм обладает неполиномиальной, или экспоненциальной, сложностью.
Оценка трудоемкости алгоритма позволяет судить о том, как влияет
быстродействие вычислительной машины на время выполнения алгоритма.
Пусть имеется пять алгоритмов, трудоемкость которых соответственно п,
n logn, п
2
, п
3
и 2
п
. Пусть условная элементарная операция, которая является
единицей измерения трудоемкости алгоритма, выполняется за одну
миллисекунду. В табл. 6.1, заимствованной из работы [2], показано, какого
размера задачи могут быть решены каждым из этих алгоритмов за одну
секунду, одну минуту и один час. Из этой таблицы видно, например, что за
одну минуту алгоритм с трудоемкостью п
2
решает задачу в шесть раз большую,
чем алгоритм с трудоемкостью п
3
.
Следует, однако, иметь в виду, что трудоемкость, выражаемая большей
степенью полинома, может иметь меньший множитель с из приведенного выше
неравенства f(n) ≤ сg(n). Точно так же сложность алгоритма, которая носит
экспоненциальный характер, может иметь множитель, меньший, чем у
полиномиальной сложности. При разработке компьютерных программ для
решения практических задач важно знать, при каких значениях параметра п
время выполнения экспоненциального алгоритма оказывается меньше, чем
время выполнения полиномиального алгоритма, решающего ту же задачу.
Таблица 6.1
Связь трудоемкости алгоритма с максимальным размером
задачи, решаемой за единицу времени
Временнáя Максимальный размер задачи
сложность 1 с 1 мин 1 ч
п
1000
6
×
10
4
3,6
×
10
6
п logn 140 4893
2,0
×
10
5
n
2
31 244 1897
n
3
10 39 153
2
n
9 15 21
Для очень многих практических комбинаторных задач существуют
алгоритмы только экспоненциальной трудоемкости. Может показаться, что с
совершенствованием вычислительной техники и ростом быстродействия
вычислительных машин проблема трудоемкости ослабевает. Однако данные,
приведенные в табл. 6.2 [2], говорят, что это не так. Пусть следующее
поколение вычислительных машин будет иметь быстродействие, в десять раз
большее, чем у современных вычислительных машин. В табл. 6.2 показано, как
благодаря увеличению быстродействия возрастут размеры задач, которые могут