3.2 Теория NP -полных задач
3.2.1 Сложность алгоритма
Когда идет речь о сложности алгоритма, обычно имеется в виду скорость
выполнения алгоритма (временная сложность) или требуемая для его
работы память (емкостная сложность). При оценке времени выполнеия,
память чаще всего считается неограниченной и не оценивается. Дальше
будем говорить в основном о скорости выполнения, но практически
все наши определения и рассуждения будут аналогичны и для оценки
емкостной сложности алгоритмов.
Время выполнения или требуемая память для одного и того же
алгоритма будет разниться в зависимости от конкретных входных
данных. Оценить сложность в этом смысле безотносительно параметров
невозможно. С другой стороны оценка сложности для каждого набора
входных параметров отдельно будет слишком трудоемкой. По-этому,
необходимо разделить задачу на группы частных случаев, чтобы оценить
сложность для каждой такой группы.
Определение 3.2.1 . Массовая задача — задача с параметрами.
Определение 3.2.2 . Индивидуальная задача — это массовая задача,
для всех параметров которой заданы конкретные значения.
Пример 3.2.1 . Например, задача сортировки массива длины n, где не
указаны n и значения элементов массива является массовой.
Задача отсортировать массив {8, 10, 4, 5, 1, 3, 7 } является
индивидуальной задачей к массовой задаче сортировки.
Для оценки скорости выполнения имеет значение, на каком именно
вычислительном устройстве работает алгоритм. В теории сложности
алгоритмов различают машины Тьюринга с одной лентой, с k лентами
и с произвольным доступом к памяти. Они имеют разные возможности
и, следовательно, алгоритмы и время их работы на этих машинах будет
различной.
Кроме того, для выбранной машины, реальная длительность
выполения данного алгоритма может зависить от быстродействия
171