Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задача о клике.docx
Скачиваний:
9
Добавлен:
28.05.2022
Размер:
477.53 Кб
Скачать

2.4 Сложность алгоритма.

Когда речь идет о сложности алгоритма, обычно имеется скорость выполнения алгоритма (временная сложность) или требуемая для его работы память (емкостная сложность). При оценке времени выполнения, память чаще всего считается неограниченной и не оценивается. Дальше будем говорить в основном о скорости выполнения, но практически все наши определения и рассуждения будут аналогичны и для оценки емкостной сложности алгоритмов.

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

Массовая задача – задача с параметрами

Индивидуальная задача – это массовая задача, для всех параметров которой заданы конкретные значения.

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

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

Пусть заданы следующие объекты:

  1. Массовая задача;

  2. Класс индивидуальных задач данной массовой задачи;

  3. Алгоритм, решающий эту задачу;

  4. Тип машины, на которой будет работать этот алгоритм;

  5. Ключевые операции, играющие в алгоритме основную роль.

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

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

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

Часто сложность алгоритма не имеет точного представления формулой над хорошо известными функциями. В этом случае для предъявления функции сложности пришлось бы предъявить бесконечную таблицу значений. Тогда имеет смысл оценить сложность более простой функцией, например, полиномом некоторой степени. (О - символика) Будем писать f(n)=O(g(n)), если существуют n0 ∈ N и c ∈ R+:

f(n) ≤ c*g(n), для любого n ≥ n0

Если f(n)=O(g(n)) будем говорить, что функция f(n) имеет порядок O(g(n)).

Какую сложность можно считать практически приемлемой? Рассмотрим таблицу, на которой представлено сравнение длительности работы алгоритмов разной сложности на некоторой гипотетической машине. По горизонтали отмерены размеры входных параметров, по вертикали T(n), сложность алгоритмов.

Рисунок 2: Сравнение времени выполнения алгоритмов различной сложности в зависимости от размера параметра.

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

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

Соседние файлы в предмете Дискретная математика