Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры и алгоритмы / графы_задачи1.doc
Скачиваний:
98
Добавлен:
23.02.2015
Размер:
1.58 Mб
Скачать
  1. Вычислительная сложность алгоритмов

Методы решения многих задач мате­матики носят алгоритмический характер. Для задач, имею­щих практический интерес, ищут именно разрешающие алгорит­мы. Уточнение понятия алгоритма позволило выявить алгорит­мически неразрешимые проблемы.

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

Поиск эффективных алгоритмов для решения задач дискрет­ной математики привел к одной из важнейших ее проблем - к решению вопроса о возможности исключения перебора вариан­тов в комбинаторных алгоритмах.

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

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

Оценка сложности алгоритмов и создание эффективных алго­ритмов - одна из важнейших задач современной дискретной математики.

Существует много критериев оценки алгоритмов. Но можно сказать, что одним из самых важных критериев является его временная сложно­сть. Время ра­боты алгоритма можно выразить в виде функции от «размеров» входных данных, требуемых для описания задачи. Входные и вы­ходные данные можно кодировать некоторым «разумным» спо­собом в виде двоичных последовательностей из нулей и единиц. Тогда алгоритм можно рассматривать как последовательность двоичных операций, работающих с памятью из двоичных же символов.

Временная сложность алгоритма отражает затраты времени (число шагов), требуемые для его работы. Это функция, которая каждой входной длине n ставит в соответствие мини­мальное время, затрачиваемое алгоритмом на решение всех од­нотипных индивидуальных задач этой длины.

Из курса математического анализа известно, что функция f(n) есть O(g(n)), если существует константа c, такая что |f(n)| <= c(g(n)) для всех n >= 0.

Полиномиальным алгоритмом (или алгоритмом полиномиаль­ной временной сложности) называется алгоритм, у которого вре­менная сложность равна О(Р(n)), где Р(n) — некоторая поли­номиальная функция от входной длины n. Алгоритмы, для вре­менной сложности которых не существует такой оценки, называ­ются экспоненциальными.

Задача считается труднорешаемой, если для нее не сущест­вует разрешающего полиномиального алгоритма.

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

Таблица 2

Оценка зависи­мости времени работы алгоритмов сложности, равной n, n3, 2n, от размеров входной информации

Функция временной сложности

Размерность n

10

20

50

60

n

0,00001 секунд

0,00002 секунд

0,0005 секунд

0,0006 секунд

n3

0,001 секунд

0,008 секунд

0,125 секунд

0,216 секунд

2n

0.001 секунд

1,0 секунд

35,7 дней

366 столетий

Таблица 3

Оценка максимальной размерности задачи, решаемой за один час

Функция временной сложности

Современная ЭВМ

ЭВМ, в 100 раз более быстрая

ЭВМ, в 1000 раз более быстрая

n

N1

100 N1

1000 N1

n3

N2

4.64 N2

10 N2

2n

N3

N3 + 6.64

N3 + 9.97

Многие прикладные задачи могут быть сформулированы в терминах теории графов. Однако при решении реальных задач характеристики соответствующих графов (например, число вер­шин n и число ребер m) весьма велики, и их анализ возможен лишь с привлечением ЭВМ.

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

Задачи теории графов можно классифицировать следующим образом:

  1. задачи, для которых имеются алгоритмы сложности O(n + m);

  2. задачи, для которых известны алгоритмы сложности О (Р(n + m)), где Р — нелинейный полином;

  3. задачи, для которых известны только алгоритмы экспонен­циальной сложности, но про которые нельзя сказать, что для них нет алгоритмов полиномиальной сложности;

  4. задачи, которые могут быть решены лишь с использовани­ем алгоритма экспоненциальной сложности.

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

К четвертому классу относятся задачи перечисления всех остовных деревьев графа и перечисления всех циклов графа. Это объясняется тем, что у полного n-вершинного графа число остовных деревьев равно nn-2 , число циклов дли­ны i равно Cin(i - 1)!, т. е. общее число циклов составляет

К первому классу относятся, например, следующие задачи: поиск остовного дерева графа; выделение компонен­ты связности графа и сильной связности орграфа; нахождение минимального пути в орграфе (или минимального маршрута в графе). Для решения этих задач построены алгоритмы, имеющие сложность О(n + m).

Второй класс в настоящее время включает в себя такие за­дачи: нахождение матрицы связности; нахождение мини­мального пути в нагруженном графе (сложность алгоритма О(n3)); нахождение минимального ос­товного дерева в нагруженном графе (сложность алгоритма О (n2)).

Третий класс содержит следующие задачи: о существовании в графе гамильтонова цикла (задача коммивояжера); об определении изоморфизма данного графа G1 какому-нибудь подгра­фу графа G2, и многие другие задачи. Для решения этих задач не существует полиномиальных алго­ритмов, хотя не кажется безусловным, что их решение возможно лишь с помощью экспоненциальных алгоритмов. Для многих за­дач этого класса справедливо следующее свойство сводимости: существование полиномиального алгоритма для решения одной из них дало бы полиномиальный алгоритм для решения другой. В современной дискретной математике третий класс задач явля­ется предметом пристального изучения.