Теорема Радо-Эдмондса (жадный алгоритм) — различия между версиями
Firespace (обсуждение | вклад)  | 
				Firespace (обсуждение | вклад)   | 
				||
| Строка 49: | Строка 49: | ||
=== Графовый матроид ===  | === Графовый матроид ===  | ||
| − | + | Примером задачи, которая решается с помощью жадного алгоритма, является поиск [[Лемма о безопасном ребре| остовного дерева]]. Остовное дерево — это [[Определение матроида| база]] в графовом матроиде. Данная задача решается с помощью [[Алгоритм Краскала| алгоритма Краскала]].   | |
=== Матроид паросочетаний ===  | === Матроид паросочетаний ===  | ||
| − | + | Типичной задачей из этого класса, является поиск наибольшего паросочетания в двудольном графе. Здесь мы имеем дело с [[Примеры матроидов| трансверсальным матроидом]]. Решается эта задача с помощью [[Алгоритм Куна для поиска максимального паросочетания| Алгоритма Куна]].  | |
=== Матричный матроид ===  | === Матричный матроид ===  | ||
| − | + | Классической задачей, которую мы рассмотрим, будет нахождение максимального количества линейно независимых строк в матрице. Рассмотрим матрицу с действительными кэффициентами <tex>[a_{ij}]</tex>. Пусть <tex>E</tex> — множество её строк, <tex>I</tex> — семейство множеств линейно независимых строк. Тогда <tex>M = \langle E, I \rangle</tex> — матроид. Задача решается с помощью метода Гаусса<ref>[http://e-maxx.ru/algo/linear_systems_gauss e-maxx:ru:Метод Гаусса]</ref>    | |
== См. также ==    | == См. также ==    | ||
Версия 23:54, 17 июня 2014
Содержание
Теорема Радо-Эдмондса
| Теорема (Радо-Эдмондса): | 
На носителе матроида  задана весовая функция . Пусть  — множество минимального веса среди независимых подмножеств  мощности . Возьмем , ,  — минимальна.
 Тогда — множество минимального веса среди независимых подмножеств мощности .  | 
| Доказательство: | 
| 
 Рассмотрим — множество минимального веса среди независимых подмножеств мощности . Из определения матроида: . Тогда верны два неравенства:
 Заметим, что величина с двух сторон ограничивает величину . Значит, эти величины равны: . Следовательно, . Таким образом получаем, что если объединить множество с — минимальным из таких, что , — то получим множество минимального веса среди независимых подмножеств мощности . | 
Жадный алгоритм поиска базы минимального веса
| Теорема (жадный алгоритм поиска базы минимального веса): | 
Пусть на носителе матроида  задана весовая функция . Для любого  выполнено: . Тогда база минимального веса матроида  ищется жадно.  | 
| Доказательство: | 
| 
 Пусть ¸ а — время, за которое выполняется проверка множества на независимость. Псевдокод алгоритма: sort(X) // сортируем элементы по возрастанию веса for to if Рассмотрим шаг алгоритма, на котором мы пытаемся добавить элемент . Заметим, что если при его добавлении сохраняется независимость множества , то это элемент минимального веса не из . В самом деле, пусть — элемент минимального веса не из , который можно добавить к с сохранением его независимости, тогда . Но тогда он уже был бы добавлен на -ом шаге алгоритма. Понятно, что все базы имеют одинаковую мощность (иначе в меньшую можно было бы добавить элемент из большей по аксиоме матроидов, что противоречит определению базы). По теореме Радо-Эдмондса множество минимального веса, имеющее мощность базы, (то есть база минимального веса) ищется последовательным добавлением в изначально пустое множество элементов минимального веса из так, чтобы после каждого добавления множество оставалось независимым. Алгоритм работает за . На сортировку элементов из по возрастанию весов уходит . После чего, построение базы выполняется шагов цикла, каждый из которых работает времени. Однако, если считать, что проверка множества на независимость происходит за , асимптотика алгоритма будет | 
Примеры
Графовый матроид
Примером задачи, которая решается с помощью жадного алгоритма, является поиск остовного дерева. Остовное дерево — это база в графовом матроиде. Данная задача решается с помощью алгоритма Краскала.
Матроид паросочетаний
Типичной задачей из этого класса, является поиск наибольшего паросочетания в двудольном графе. Здесь мы имеем дело с трансверсальным матроидом. Решается эта задача с помощью Алгоритма Куна.
Матричный матроид
Классической задачей, которую мы рассмотрим, будет нахождение максимального количества линейно независимых строк в матрице. Рассмотрим матрицу с действительными кэффициентами . Пусть — множество её строк, — семейство множеств линейно независимых строк. Тогда — матроид. Задача решается с помощью метода Гаусса[1]