Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Поток минимальной стоимости и труднорешаемые задачи. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
1.5. Задачи 51
в Екатеринбург был максимально возможным. Он знает, что «узким местом» на пути поездов являются мосты через изоб­раженные на схеме реки. Для каждого из них известна про­пускная способность, равная количеству тонн груза, которое можно перевезти через этот мост в течение суток. Зная про­пускные способности мостов, помогите министру решить эту задачу.
Исходные данные
Единственная строка содержит пропускные способности мо­стов в Нижнем Новгороде, в Котельниче, в Перми, близ Каза­ни, в Вятских ПолянахивСарапуле. Все пропускные способно­сти являются целыми числами и лежат в пределах
9
от 1 до 10
.
Результат
Определите суточный объем грузов, отправляемых из Москвы по каждому из описанных выше маршрутов, чтобы суммар­ный грузопоток из Москвы в Екатеринбург был максималь­ным. Выведите эти четыре числа через пробел, с точностью
3
до 10
. Если задача имеет несколько решений, выведите лю-
бое из них.
Глава 2
Труднорешаемые задачи
2.1. Введение в теорию труднорешаемых задач
Каждый знает, что бывает так, что задача легко решает­ся, и бывает, что трудно, причем сложность решения задачи зависит скорее от того, кто решает, т. е. трудность задачи — понятие субъективное.
Но, однако, оказывается, можно формализовать понятия труднорешаемой и легкорешаемой задачи так, что они стано­вятся объективными.
В дискретной оптимизации задача называется легкорешае- мой, если известен алгоритм, ее решающий, с полиномиальной оценкой сложности от входных параметров n и m.
Задача называется труднорешаемой, если такой алгоритм неизвестен. Причем слова «не известен» имеют в русском язы­ке два значения. Первое — не известен, потому что такой ал­горитм не существует, и второе — потому что никто не смог доказать, что такого алгоритма нет. Ситуация такая: не из­вестно, потому что ничего неизвестно. Вот на копейку более точная информация.
52
2.1. Введение в теорию труднорешаемых задач 53
Класс легкорешаемых задач обозначается P , с классом труд­норешаемых задач сложнее: выделяется класс полиномиально распознаваемых — NP, в частности, P NP .
Мы не будем здесь приводить точных определений классов P и NP, это выходит далеко за рамки пособия, точные опре­деления можно посмотреть в [3] и [4].
Одна из крупнейших проблем математики, сформулирован­ная в 1971 г. Куком, выглядит так:
верно ли, что справедливо равенство P = NP?
Задачи, которые мы рассматривали до сих пор, относятся к классу P , между тем как подавляющее большинство практи­чески важных задач — к классу NP . Зачем мы это делаем? Просто алгоритмы, которые в массе своей разрабатываются для труднорешаемых задач, как правило, основаны на алго­ритмах решения легкорешаемых задач.
В классе NP выделяется подкласс NP-полных задач, т. е. таких, к которым полиномиально сводятся все задачи класса NP.
Достаточно решить одну (!) NP -полную задачу и тогда бу­дут решены все задачи класса NP -полных, тем самым будет показано, что P = NP , а автор получит 1 миллион долларов от института Клея.
Мы привыкли к тому, что все задачи формулируются как оптимизационные, в то время как в теории NP -полных задач удобнее формулировать задачи как задачи распознавания.
Можно доказать, что задачи распознавания ничуть не про­ще, чем оптимизационные.
Доказано, что следующие задачи NP -полны.
1. ГАМИЛЬТОНОВ ЦИКЛ. Дан граф G. Определить, со­держит ли граф G гамильтонов цикл.
2. ВЕРШИННОЕ ПОКРЫТИЕ. Даны граф G =(V, E) и на- туральное число k. Определить, существует ли в графе G вершинное покрытие мощности не более k.
54 Глава 2. Труднорешаемые задачи
Множество A V называется вершинным покрытием, если любое ребро e E инцидентно какой-либо вершине w A.
3. ДОМИНИРУЮЩЕЕ МНОЖЕСТВО. Даны граф G =(V, E) и натуральное число k. Определить, суще- ствует ли в графе G доминирующее множество мощности не более k. Множество A V называется доминирующим, если лю- бая вершина v/A смежна какой-либо вершине w A.
4. КЛИКА. Даны граф G =(V,E) и натуральное число k. Определить, содержит ли граф G клику мощности k. Множество A V называется кликой, если любые две входящие в него вершины смежны.
5. ВЕРШИННАЯ РАСКРАСКА. Даны граф G =(V, E) и натуральное число k. Определить существует ли пра­вильная k-раскраска всех вершин графа. Множество A V называется правильно k-раскрашивае- мым, если любые две смежные вершины из A получают разные цвета из множества {1, 2,...,k}.
И т. д., и т.п. На сегодня известно, что класс
задач содержит их несколько сотен.
Как же решать труднорешаемые задачи? Вот наша класси-
фикация возможных подходов.
1. Эвристические алгоритмы. Это наукобразное назва­ние «алгоритмов от балды», иначе говоря, алгоритмов, которые во многих случаях дают правильный ответ, но мо­гут его не дать. Как правило, такие алгоритмы придумы­ваются из тех соображений, что в нормальных (обычных) ситуациях они правильные, т.е. это алгоритмы правдопо­добные.
2. Алгоритмы с гарантированной оценкой точности. Оказывается, во многих случаях, не находя точного ре­шения, можно показать, что найденное решение не более чем в k раз превосходит оптимальное. Точные определе­ния мы дадим позже.
NP-полных
2.2. Задача о вершинном покрытии 55
3. Частные случаи. Зачастую оказывается, что случай является частным, а там находится оптимальный алго­ритм.
4. Стохастические алгоритмы. Это тоже наукообраз­ное название, за которым стоит, правда, большой смысл. До сих пор мы рассматривали только детерминирован­ные алгоритмы, т. е. алгоритмы, которые при одних и тех же начальных данных, но при разных запусках давали один и тот же результат. Здесь мы познакомимся с мето­дами, которые при разных запусках дают разные ответы, несмотря на то, что входные данные одни и те же.
5. Точные методы. Мы не знаем других методов поиска точного решения, кроме метода ветвей и границ. При­менять этот метод можно только тогда, когда задача ис­ключительно важна, и решение займет не слишком много времени (компьютер — железяка, пусть работает!)
2.2. Задача о вершинном покрытии
Проиллюстрируем все вышесказанное на одном примере.
Напомним, множество вершин A называется вершинным покрытием, если всякое ребро графа инцидентно хотя бы одной вершине из множества A.
В задаче требуется найти минимальное множество, являю­щееся вершинным покрытием.
2.2.1. Эвристический алгоритм
Алгоритм можно сформулировать так.
Последовательно выбирать вершину наибольшей степени из оставшихся, добавив ее в строящееся множество, и уда­лить все ребра ей инцидентные.
Алгоритм легко реализовать так, чтобы он имел сложность
2
O(n
). Алгоритм, безусловно, правдоподобный.
56 Глава 2. Труднорешаемые задачи
b
a
Рис. 2.1. Работа эвристического алгоритма:
a — алгоритм даст верный ответ;
b — алгоритм может не дать верный ответ
На рис. 2.1, a алгоритм сразу возьмет вершину 1 и закончит работу. Ответ правильный.
На рис. 2.1, b всё зависит от того, что алгоритм выберет на первом шаге. Если будет выбрана вершина 3, тогда дальше алгоритму не останется выбора, и он должен взять по одной вершине из {1, 2} и {4, 5}. То есть алгоритм построит вер­шинное покрытие из трех элементов, хотя правильно выбрать из двух, а именно {2, 4}. Ответ алгоритма может быть непра­вильным.
Но этот алгоритм может давать и очень плохие результаты. Вот еще один пример.
Рассмотрим трехдольный граф (на самом деле он двудоль­ный, но нам удобнее именно так излагать) G =(V, E),где V = X Y Z .
Пусть k — натуральное число. Положим, что в X будет k 2 вершины, в Y и Z —поk вершин. Множество ребер E определим так: каждая вершина из X соединена с каждой из Y , каждая i-я в Y соединена с i-й в Z (см. рис. 2.2).
Здесь степень каждой вершины из X равна k, а степень каждой из Y равна k 1. Алгоритм выберет на первом шаге вершину x
и т. д., т. е. будет выбрано все множество X, останутся ребра
x
2
, удалит все ребра, инцидентные x1; затем возьмет
1
между Y и Z, таковых останется еще k.
2.2. Задача о вершинном покрытии 57
a
b
Рис. 2.2. Плохая работа эвристического алгоритма:
a — при произвольном k; b —приk =3
Итого: будет выбрано (k 2)+k,т.е.2k2 вершин, в то вре- мя как вершин в минимальном вершинном покрытии равно k, это, например, все вершины из Y .
2.2.2. Алгоритмы с гарантированной
оценкой точности
Пусть решается класс задач B на поиск минимума. Тут под B имеется в виду массовая задача. Например, в заданном графе найти минимальное вершинное покрытие.
Говорят, что некий алгоритм A имеет гарантированную точ- ность k, если для любой индивидуальной (т. е. конкретной) за- дачи класса B справедливо неравенство
A(G)k ·Opt(G),
здесь A(G) — решение, найденное алгоритмом A, Opt(G) — оптимальное решение, A(G), Opt(G) — их веса.
При этом мы можем и не знать оптимального ответа, но мо­жем его оценить.
Рассмотрим следующий алгоритм. Пусть G =(V,E) — про- извольный граф.
58 Глава 2. Труднорешаемые задачи
Algorithm 9: Алгоритм «Вершинное покрытие»
1 Положим C = , сформировать из E ОЧЕРЕДЬ в
произвольном порядке;
2 while (ОЧЕРЕДЬ = ) do 3 считать из ОЧЕРЕДЬ ребро e, удалить e из
ОЧЕРЕДЬ;
4 if e C = ∅ (ни одна вершина из e =(v, w) не
попадает в C) then
5 добавить обе вершины v и w в C
6 end 7 end
Теорема 2.1. Алгоритм «Вершинное покрытие» имеет точ­ность 2, а сложность O(m).
Пусть M — наибольшее паросочетание, хотя бы одна из вершин произвольного ребра из M должна попасть в вер­шинное покрытие. Оптимальное решение может состоять из од­ной вершины произвольного ребра, а может из двух. Отсюда получаем неравенство A(G) 2 ·Opt(G), где через A обо- значен алгоритм «Вершинное покрытие», A(G) — вершинное покрытие, построенное алгоритмом для графа G, A(G)— вес решения; естественно считать, что вес равен мощности вершин­ного покрытия A(G).
Придется смотреть все ребра, их m штук, отсюда и слож­ность O(m). Анализ того, входят ли вершины в множество C, имеет сложность O(1).
Обе крайние оценки точности алгоритма достижимы.
Пусть ОЧЕРЕДЬ такая: 23, 12, 34.
Тогда на рис. 2.3, a выберутся вершины 2 и 3, обе добавятся в C, и в дальнейшем множество C не меняется. То есть в этом случае алгоритм нашел оптимальное решение. Итак, в этом случае A(G) = Opt(G).
2.2. Задача о вершинном покрытии 59
a
b
Рис. 2.3. Работа алгоритма «Вершинное покрытие»:
a — алгоритм находит оптимальное решение;
b — алгоритм не находит оптимальное решение
В случае, когда в структуре ОЧЕРЕДЬ ребро (2, 3) сто­ит последним, получается ответ в два раза хуже оптимально­го. Проверьте сами, а мы приведем чуть другой пример (см. рис. 2.3, b). Какова бы ни была ОЧЕРЕДЬ, в множество C попадут все четыре вершины, в то время как оптимальное ре­шение состоит из двух вершин. Здесь налицо другой крайний случай A(G) =2·Opt(G).
2.2.3. Частные случаи
Оказывается, для двудольных графов есть полиномиаль­ный алгоритм, более того, мы его изучали! Это алгоритм Хоп­крофта — Карпа!
Пусть G =(V, E) — произвольный граф. В теории графов приняты следующие обозначения.
Число вершинного покрытия, т. е. количество вершин в наименьшем вершинном покрытии, обозначается как β а число паросочетания, т. е. количество ребер в наибольшем паросочетании — α
(G).
1
Теорема 2.2. В произвольном двудольном графе G =(X, Y, E) число вершинного покрытия β ния α
(G).
1
(G) равно числу паросочета-
0
(G),
0
60 Глава 2. Труднорешаемые задачи
Докажем вначале неравенство α
(G) β0(G) (т. е. число
1
паросочетания не больше числа вершинного покрытия). Пусть M — произвольное паросочетание, а C — произвольное вер­шинное покрытие. Для каждого ребра e = vw из M через f(e) обозначим ту вершину, которая входит в C, если обе вхо- дят — то одну из них (любую). Поскольку M — паросочетание, то f (e) = f(g), если ребра e и g различны, иначе говоря, отоб­ражение f : M C является инъективным вложением M в C. При этом |M| = |f(M )| |C|,таккаквC могут быть еще и другие элементы. Следовательно, любое вершинное покры­тие содержит не меньше вершин, чем количество ребер в любом паросочетании. Отсюда α
(G) β0(G).
1
Заметим, что это неравенство доказано для произвольных графов, а не только для двудольных.
Докажем обратное неравенство. Пусть M — наибольшее па­росочетание в двудольном графе G. Пусть e = xy произвольное ребро из M . Назовем вершину y отмеченной, если существует M-цепь, оканчивающаяся в y, в противном случае считаем вер­шину x отмеченной. Напомним определение M -цепи.
Цепь p называется M -цепью, если выполняются два усло­вия: начальная вершина x
— светлая, цвета ребер чередуются
0
по правилу: светлое-темное и цепь p имеет нечетную длину, т. е. заканчивается в вершине y из Y .
При этом цвет последней вершины неважен.
Множество всех отмеченных вершин обозначим через C . Из построения следует, что |M | = |C|.
Убедимся, что множество C является вершинным покры­тием.
Пусть e = xy произвольное ребро графа G и x/C (если x C , то доказывать нечего). Проверим, что тогда y C. Возможны два случая.
1. Ребро e — темное, т. е. из M , но хотя бы одна из вершин ребра e должна лежать в C, поскольку если x/C ,тоy C.
2. Пусть ребро e — светлое.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]