- •Введение
- •Лабораторная работа № 1 Генерирование разбиений множества и чисел
- •Теоретическая часть
- •Вопросы для самопроверки
- •Задание на лабораторную работу
- •Лабораторная работа № 2 Вычисление наибольшего паросочетания методом Хопкрофта-Карпа
- •Теоретическая часть
- •Вопросы для самопроверки
- •Задание на лабораторную работу
- •Матричные матроиды
- •Матроиды трансверсалей
- •Вопросы для самопроверки
- •Задание на лабораторную работу
- •Список литературы
Вопросы для самопроверки
1. Какие графы называются двудольными ?
2. Что собой представляет паросочетание в неориентированном графе ?
3. Что понимается под термином чередующаяся цепь ?
4. Когда паросочетание в двудольном графе наибольшее ?
Задание на лабораторную работу
1. По заданному алгоритму 2.1 написать и отладить программу нахождения наибольшего паросочетания методом Хопкрофта-Карпа.
2. Продемонстрировать работающую программу преподавателю и получить отметку о ее выполнении.
3. Провести анализ полученного алгоритма на сложность.
4. Оформить отчет о проделанной работе. Он должен включать в себя:
– цель работы;
– ответы на вопросы для самопроверки;
– схему обрабатывающего алгоритма и описание его работы;
– распечатки экранных форм, полученных в результате работы программы.
Лабораторная работа № 3
Жадные алгоритмы для матричного матроида
и матроида трансверсалей
Цель работы – написать и отладить программу генерирования всех k-элементных подмножеств множества {1, ..., n} в лексикографическом порядке.
Теоретическая часть
Жадные алгоритмы решения оптимизационных задач. Рассмотрим следующую матрицу с действительными неотрицательными коэффициентами:
Решим следующую оптимизационную задачу.
Задача 1. Найти такое подмножество элементов матрицы, что
(а) в каждом столбце находится не более одного выбранного элемента и
(б) сумма выбранных элементов является наибольшей из возможных.
Попробуем решить эту задачу следующим образом: будем выбирать элементы последовательно, причем каждый раз будем выбирать наибольший из элементов, которые мы можем добавить, не нарушая условия (а). Будем действовать так вплоть до момента, пока добавление произвольного элемента не нарушит условия (а). Алгоритм такого типа мы будем называть жадным.
Для задачи 1 и матрицы
жадный алгоритм находит подмножество
которое действительно дает наибольшую возможную сумму.
Нетрудно отметить, что с помощью жадного алгоритма правильно находится решение задачи 1 для произвольной вещественной матрицы с неотрицательными элементами.
Рассмотрим несколько иную задачу.
Задача 2. Найти такое подмножество элементов матрицы, что
(а) в каждом столбце и в каждой строке находится не более одного выбранного элемента и
(б) сумма выбранных элементов является наибольшей из возможных.
На этот раз применение жадного алгоритма к задаче 2 и матрице дает подмножество
с суммой 12, что не является правильным решением, поскольку подмножество
имеет сумму 13. Следовательно, на втором шаге не следовало бы быть жадным, мы выигрываем в конечном результате, выбирая несколько меньший элемент (3 вместо 4).
Возникает вопрос: когда выгодно быть жадным? Сформулируем это более строго.
Мы будем рассматривать оптимизационные задачи следующего типа.
Задача 3. Даны конечное множество
,
семейство его подмножеств
и функция
,
где
обозначает множество вещественных
неотрицательных чисел. Найти подмножество
с наибольшей суммой
.
Как задача 1, так и задача 2 являются
частными случаями задачи 3. В обоих
случаях
есть множество позиций матрицы, a
ставит в соответствие позиции
матрицы
число
.
Для задачи 1
каждый столбец содержит не более одной
позиции из множества
,
а в случае задачи 2
каждый столбец и каждая строка содержит не более одной позиции
из множества .
Теперь мы можем сформулировать наш
вопрос следующим образом: при каких
условиях относительно семейства
жадный алгоритм правильно решает
задачу 3 для произвольной функции
?
Оказывается, что на этот вопрос можно
найти простой ответ. А именно,
достаточно, чтобы пара
образовывала так называемый матроид.
Матроиды и их основные свойства. Матроиды были введены Уитни в работе [73] в совершенно ином контексте, нежели жадные алгоритмы, а именно в исследованиях абстрактной теории линейной зависимости. Существует много эквивалентных определений матроида. Для нас наиболее удобным будет следующее определение:
Матроидом мы будем называть
произвольную пару
,
где
конечное множество,
а
семейство,
удовлетворяющее условиям:
и если
Для произвольных
,
таких что
существует
элемент
такой что
(Условие
исключает вырожденный случай
Множества семейства
мы будем называть независимыми
множествами, а остальные подмножества
из
зависимыми
множествами матроида
.
В этом проявляется уже упомянутая связь
матроидов с теорией линейной зависимости:
аксиомы матроидов выбраны таким образом,
чтобы они отражали наиболее характерные
свойства независимых множеств линейного
пространства, точнее говоря, независимых
подмножеств, содержащихся в некотором
конечном подмножестве этого пространства
(вспомним, что подмножество
линейного пространства называется
независимым, если не существует
набора скаляров
,
не всех равных нулю, такого что
.
В самом деле, очевидно, что произвольное
подмножество независимого множества
линейного пространства независимо.
Если
для линейно независимых подмножеств
линейного пространства, то
порождает пространство размерности
,
которое может содержать не более чем
элементов множества
.
Следовательно, существует элемент
не принадлежащий этому подпространству.
Множество
порождает подпространство размерности
и, следовательно, является линейно
независимым.
Будем говорить, что два матроида
и
изоморфны, если существует взаимно
однозначное отображение
множества
на множество
,
такое что
тогда и только тогда, когда
.
Часто мы не будем делать различия между
изоморфными матроидами.
Для произвольного подмножества
мы будем изучать его максимальные
независимые подмножества, т. е. независимые
подмножества
,
обладающие таким свойством: не существует
независимого подмножества
,
такого что
.
Теорема 3.1. Пусть
конечное множество,
семейство его
подмножеств, удовлетворяющих условию
.
При этих предположениях
является матроидом тогда и только тогда,
когда удовлетворяется условие
Для произвольного подмножества
каждые два максимальных
подмножества
множества
имеют одинаковую мощность.
Доказательство.
Предположим,
что
является матроидом и для некоторого
существуют два максимальных независимых
подмножества
,
такие что
.
Выберем произвольное подмножество
(независимое по условию
,
такое что
.
В силу
существует такой элемент
,
что
вопреки максимальности
множества
.
Напротив, предположим,
что выполняются условия
и
,
Выберем такие произвольные подмножества
,
что
и обозначим
.
Допустим, что не существует такого
элемента
,
что
.
Это означало бы, что
является максимальным независимым
подмножеством множества
.
Расширяя
до максимального независимого
подмножества
,
мы имели бы
вопреки условию
.
Следовательно, условия
и
влекут за собой условие
.
■
Из теоремы 3.1 следует, что условия и образуют эквивалентную систему аксиом для матроидов.
Мощность максимального подмножества
множества
называется рангом этого множества
и обозначается через
:
Очевидно, что подмножество
является независимым тогда и только
тогда, когда
.
Каждое максимальное независимое
множество матроида
будем называть (по аналогии с линейными
пространствами) базой этого матроида,
а ранг
,
являющийся аналогом размерности
линейного пространства, рангом
матроида. Отметим важное следствие
теоремы 4.1.
Следствие 3.1. Каждые две базы матроида имеют одинаковое число элементов. ■
Отметим также, что каждое независимое
множество
можно расширить до базы
;
достаточно поочередно добавлять в
новые элементы, присоединение которых
не нарушает независимости, вплоть
до момента, когда таких элементов
больше не существует. Полученное
множество будет максимальным независимым
множеством, а, следовательно, базой.
Аналогично, произвольное независимое
множество
можно расширить до максимального
независимого подмножества множества
.
Отметим некоторые свойства рангов.
Теорема 3.2. Для произвольных
имеем
,
если
,
то
,
,
,
если
,
то
.
Доказательство.
Свойства R1
и R2
очевидны. Докажем R3.
Пусть
максимальное независимое множество в
.
Расширим его до максимального независимого
множества
,
а затем до максимального независимого
множества
.
Имеем
,
а,
следовательно,
Условие очевидно. вытекает из :
■
Продолжая аналогию с линейными
пространствами, будем говорить, что
элемент
зависим от множества
,
если
,
и будем обозначать через
множество всех элементов, зависимых от
:
Множество
называется подпространством
матроида, если
,
т. е. если
для произвольного
.
Теорема 3.3. Для произвольных имеем
,
,
,
.
■
Доказательство.
Условие
очевидно: если
,
то
,
т. е.
.
Для доказательства
воспользуемся
.
Предположим, что
и
.
Тогда
и, следовательно,
.
Из условий
и
следует, что
.
Докажем теперь противоположное
включение. Для этого нам будет необходимо
равенство
(4.1)
Чтобы доказать
его, предположим, что
.
Из определения
имеем
.
Предположим, что для некоторого
имеет место
.
Тогда из
получаем
Отсюда индукцией
по i
получаем требуемое равенство (3.1).
Доказательство включения
теперь просто.
Предполагая
,
т.е.
,
имеем
т.е.
.
Наконец, свойство
вытекает из определения зависимости
элемента от множества: предположив
и
,
имеем
а отсюда
,
т. е.
.
■
Отметим, что из свойства
следует, что
является подпространством матроида.
Будем называть его подпространством,
натянутым на множество
.
Последним важным понятием данного
раздела является понятие цикла. Циклом
матроида мы будем называть каждое
минимальное зависимое множество, т.е.
такое зависимое множество
,
что
является независимым для произвольного
.
Понятие цикла имеет особенно ясную
интерпретацию для случая графовых
матроидов, о которых речь пойдет в разд.
5.5.
Теорема 3.4. Для произвольных циклов
выполняются условия:
Если
,
то
,
Если
и
,
то существует цикл
.
Доказательство.
Условие
выражает просто свойство минимальности,
содержащееся в определении цикла.
Докажем теперь
.
Множества
и
независимые, а следовательно,
и
.
В силу условия
(4.2)
Множество
независимое, так как оно является
собственным подмножеством обоих
циклов. Отсюда
и неравенство (4.2) можно переписать как
(4.3)
Предположим теперь,
что не существует цикла
,
о котором идет речь в условии
.
Тогда множество
независимое,
и в результате
вопреки неравенству (4.3).
Отметим важное следствие из свойства .
Следствие 3.2. Если независимое множество, то для произвольного множество содержит не более одного цикла.
Доказательство.
Если бы
существовали два различных цикла
,
то очевидно, что мы имели бы
,
и вследствие свойства
существовал бы цикл
вопреки предположению о независимости
множества
.
Свойства матроидов, рассмотренные выше, связаны с линейно независимыми множествами векторов линейного пространства. Приведем два других примера матроидов.
Для произвольного конечного множества
пара
,
очевидно, удовлетворяет условиям
и
.
Будем называть ее свободным матроидом
на множестве
.
В таком матроиде каждое множество
независимое, и в результате
.
Другой пример получаем, рассматривая
произвольное разбиение
множества
и определяя
для
.
Отметим, что если
и
,
то должен существовать такой индекс
,
что
.
Элемент
можно «перенести» в
и получить множество
.
Это доказывает справедливость условия
.
Матроид
,
определенный таким образом, будем
называть матроидом разбиений.
Теорема Радо-Эдмондса. Вернемся к
жадным алгоритмам. Сформулируем сначала
общую схему алгоритмов этого типа.
Мы будем рассматривать конечное множество
,
функцию
и семейство
.
Значение
называется весом элемента
.
Вес подмножества определяется следующим образом:
Алгоритм 3.1. (Жадный алгоритм).
1 begin
2 упорядочить
множество
по убыванию весов так, чтобы
,
где
;
3
;
4 for i: = 1 to n do
5
if
then
6 end
Теорема 3.5 (Радо, Эдмондс). Если есть матроид, то множество , найденное жадным алгоритмом, является независимым множеством с наибольшим весом. Напротив, если не является матроидом, то существует такая функция , что не будет независимым множеством с наибольшим весом.
Следует обратить внимание на один факт. Поскольку мы определили вес подмножества как сумму весов его элементов, то могло бы казаться, что оптимальное множество будет существенным образом зависеть от численных значений весов отдельных элементов. Однако же эта зависимость очень слаба: множество зависит только от упорядочения весов отдельных элементов. В жадном алгоритме после сортировки элементов веса совершенно перестают нас интересовать.
Стоит отметить, что множество
оптимальное в очень сильном смысле.
У него не только максимальна сумма
элементов, но также в любом независимом
множестве
вес i-го по величине
элемента не больше веса i-го
по величине элемента в
.
Этот факт мы будем называть оптимальностью
по Гейлу. Таким образом, в матроиде
нельзя выбрать независимое множество,
состоящее из «меньшего числа больших
по величине (по весу) элементов».
Отметим также, что при обращении упорядочения элементов жадный алгоритм выберет множество , которое не только имеет наименьший вес, но и i-й по величине элемент (считая от наименьшего) будет не больше i-го по величине элемента произвольной базы. Теперь мы можем посмотреть на применение жадного алгоритма к задаче 1 с общей точки зрения: мы имели там дело с матроидом разбиений, порожденным разбиением позиций матрицы на столбцы.
