Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АКП_ответы.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.41 Mб
Скачать

21. Вычислительная и емкостная сложность алгоритма

Физическое время реализации алгоритма при некотором наборе входных данных может быть определено как , где - количество операций i-ого типа, - время выполнения операции i-го типа, n – количество типов операций. Для одного и того же алгоритма при заданном наборе входных данных время t зависит от языка программирования и быстродействия конкретной ЭВМ. Если мы имеем такую оценку для нескольких алгоритмов решения одной и той же задачи, реализованных на разных языках и предназначенных для выполнения на ЭВМ с различным быстродействием, очевидно, что объективный выбор алгоритма выполнить невозможно. Можно принять за эталон некоторую операцию и, зная отношение времени выполнения i-й операции ко времени выполнения эталонной, можно определить суммарное число эталонных операций:

. Коэффициенты можно трактовать как относительное количество тактов . Объективная мера временной сложности алгоритма должна быть машинно- и программно-независимой. В качестве такой меры может выступать или .

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

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

Временная и вычислительная сложность являются функцией от размера входа. Размер входа – скаляр, если количество, например, некоторых действий или шагов зависит только от одного параметра входа задачи. Например, в задачах на графах – только от количества вершин или рёбер. Размер входа – вектор, если от нескольких: для графов – количество вершин, рёбер, локальной степени вершин и т. д.

Понятие вычислительной сложности

Пусть A – алгоритм решения некоторого класса задач, а n – размерность задачи этого класса, тогда вычислительная сложность алгоритма – это некоторая функция , отображающая размерность задачи в «математическое» время ее решения, то есть дающая оценку количества некоторых операций, необходимых для решения данным алгоритмом любой задачи данного класса как функции от n. Функция fA(n) является критерием качества алгоритма с точки зрения возможных временных затрат. Эффективным является понятие полиномиальный алгоритм, у которого растет не быстрее, чем полином от n. Алгоритм, имеющий экспоненциальную сложность: , пригоден для решения задач ограниченной размерности. Такие задачи определяют принадлежащими к классу NP – non-polynomial.

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

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

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

Емкостная сложность алгоритма

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

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

Вычислительная и ёмкостная сложность скоррелированы: как правило, снижение вычислительной сложности достигается за счёт увеличения ёмкостной и наоборот. В качестве обобщенной характеристики сложности алгоритма было предложено использовать так называемый коэффициент сложности , где N – суммарное количество эталонных (или доминирующих) операций, V – общий объем памяти.