Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Системный анализ.doc
Скачиваний:
12
Добавлен:
18.09.2019
Размер:
1.24 Mб
Скачать

Лекция 17. Некоторые аспекты теории сложности алгоритмов

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

Математическая постановка многовариантных задач предполагает заданным сравнительно небольшое множество элементов pi P, i = 1, …, n; где n – размерность задачи. Комбинаторным пространством множества Р называется совокупность объектов определенного вида, полученных из элементов множества Р (например, перестановки, сочетания). На множестве задана функция цели управления системой , где – пространство допустимых решений задачи. Найти такой элемент , чтобы

где N – мощность множества .

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

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

Например, булевскую задачу о рюкзаке вида

, ,

можно решить теоретически, перебирая булевские n-мерные векторы.

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

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

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

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

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

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

Определение 1. Будем говорить, что функция f(n) есть O малое по сравнению с функцией g(n), если существует константа C такая, что

для .

Определение 2. Полиномиальным алгоритмом (алгоритмом полиномиальной временной сложности) называется алгоритм, у которого временная сложность есть O(p(n)), где p(n) – это некоторая полиномиальная функция; n – размерность задачи.

Определение 3. Алгоритмы, временная сложность которых не поддаётся такой оценке, называются экспоненциальными, т.е.

.

Различия между этими типами алгоритмов становятся особенно заметными при решении задач даже не очень большого размера. Для сравнения скорости роста нескольких типичных полиномиальных и экспоненциальных функций рассмотрим табл. 13. В таблице приведены значения времени, которое гипотетическое вычислительное устройство тратит на реализацию алгоритмов с различными функциями временной сложности. Предполагается, что вычислительное устройство выполняет совокупность математических операций для каждого значения размерности n за 10–6 c. Различия между полиномиальными и комбинаторными алгоритмами проявляются еще более убедительно, если проанализировать влияние увеличения быстродействия вычислительной машины на время работы алгоритмов.

Таблица 13

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

10

20

30

40

50

60

106·n с

105 с

2·105 с

3·105 с

4·105 с

5·105 с

6·105 с

106·n2 с

104 с

4·104 с

9·104 с

16·104 с

25·104 с

36·10-4 с

106·n3 с

103 с

8·103 с

27·103 с

64·103 с

125·103 с

216·103 с

106·n5 с

101 с

3,2 с

24,3 с

1,7 мин

5,2 мин

13 мин

106·2n с

103 с

1 сек

17,9 мин

12,3 дня

35,7 лет

366

столетий

106·3n с

0,06 с

58 мин

6,5 лет

3855

столетий

2·108

столетий

1,3·1013 столетий

106·n! с

3,6 с

0,4·1011

мин

8,4·1023 столетий

8,6·1038 столетий

2,3·1054 столетий

2,6·1072 столетий

В табл. 14 показано, на сколько увеличатся размеры задач, решаемых за 1 ч машинного времени, если благодаря совершенствованию технологии быстродействие компьютеров возрастет в 100 или в 1 000 раз по сравнению с современными компьютерами.

Таблица 14

Временная сложность

Совр. ЭВМ

В 100 раз быстрее

В 1 000 раз быстрее

n

N1

100·N1

1000·N1

n2

N2

10·N2

31,6·N2

n3

N3

4,6·N3

10·N3

n5

N4

2,5·N4

3,9·N4

2n

N5

N5+6,4

N5+9,9

3n

N6

N6+4,2

N6+6,3

Из таблицы видно, что для функции f(n) = 2n увеличение скорости вычислений в 1 000 раз приводит лишь к тому, что размер задачи, разрешаемой за 1 ч, возрастет только на 10, в то время как для функции f(n) = n5 этот размер возрастет в 4 раза.

Определение 4. Будем называть задачу труднорешаемой, если для её решения не существует полиномиального алгоритма.

Заметим, что это определение не претендует на полноту и достаточную строгость. Например, если размеры решаемых задач невелики, различие между эффективными (полиномиальными) алгоритмами и неэффективными (экспоненциальными) алгоритмами может принять совсем иной характер. Из табл. 13 видно, что функция f(n) = 2n ведет себя лучше, чем f(n) = n5 при n < 20.

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

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

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

Указанные обстоятельства объясняют возросший интерес исследователей к субоптимальным методам оптимизации. В настоящее время разработки субоптимальных алгоритмов осуществляются в двух направлениях:

– поиск эффективных алгоритмов, дающих «почти оптимальное» решение;

– поиск эффективных алгоритмов, дающих «почти оптимальное» решение «почти всегда».

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

Случайный характер исходных данных большинства переборных задач позволяет считать целевую функцию реализацией некоторой непрерывной случайной величины. Это оправдывает ее рассмотрение как случайной функции G от случайных вариантов .

Определение 5. Допустимое решение назовем ( ) приближенным, если

,

где Р – вероятность попадания приближенного оптимума в окрестность точного .

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

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