Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Поток минимальной стоимости и труднорешаемые задачи. Учебно-методическое пособие
.pdf
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,т.е.2k−2 вершин, в то вре-
мя как вершин в минимальном вершинном покрытии равно 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 — светлое.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
