6 1. Введение в алгоритмы
алгоритма зависит от конкретного вида машинных команд. Поэтому
нас всегда будет интересовать лишь асимптотическая сложность алго-
ритма, т. е. порядок роста сложности при условии, что размер задачи
неограниченно возрастает.
При сравнении скорости роста двух неотрицательных функций f(n)
и g(n) удобно использовать следующие обо значения. Будем говорить,
что f(n) = O(g(n)), если существуют такие положительные константы
c и N, что f(n) 6 c · g(n) для всех n > N. В этой же ситуации можно
использовать и обозначение g(n) = Ω(f(n)).
Например, справедливы соотношения log
2
n = O(n), n = Ω(log
2
n),
n = O(2
n
).
На практике алгоритм решения некоторой задачи считается доста-
точно хорошим, если сложность этого алгоритма есть O(n
k
) при неко-
тором k > 0. В таком случае говорят, что задача может быть решена
за полиномиальное время, или, короче, что задача полин омиально раз-
решима, а сам алгоритм называют полиномиальным. Если сложность
алгоритма равна O(n), то такой алгоритм называется линейным. На-
против, если алгоритм имеет сложность Ω(a
n
) при некотором a > 1, то
его называют экспоненциальным.
Отметим, что как задача о кратчайшем пути, так и задача оптималь-
ного назначения являются полиномиально разрешимыми. В то же время
для задачи коммивояжера неизвестен полиномиальный алгоритм; впро-
чем, нет и доказательства того, что такой алгоритм не существует (см.
[18]).
Важность понятия сложности алгоритма хорошо иллюстрируют сле-
дующие таблицы, заимствованные из книги [6].
Первая таблица построена в предположении, что один шаг работы
алгоритма требует для своего в ыполнения 1 миллисекунду. Как следу-
ет из таблицы 1, при увеличении времени с 1 секунды до 1 часа, т. е. в
3, 6 · 10
3
раз, размер задачи, решаемой алгоритмом сложности 2
n
уве-
личивается только в 21/9 раза, а для алгоритма сложности n — ровно
в 3, 6 · 10
3
раз.
Может показаться, что рост скорост и вычислений, вызванный появ-
лением новых ЭВМ, уменьшит значение эффективных, т. е. имеющих
«небольшую» сложность алгоритмов. Однако, как это видно из табли-
цы 0, в действительности происходит в точности противоположное. С
ростом быстродействия ЭВМ становится возможным решение задач все
большего размера, и именно от сложности алгоритма зависит насколько
увеличение скорости ЭВМ влияет на увеличение размера задачи