Теорема Радо-Эдмондса (жадный алгоритм) — различия между версиями
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 MAXimal :: algo :: Метод Гаусса]</ref>    | |
== См. также ==    | == См. также ==    | ||
| Строка 67: | Строка 67: | ||
* [[wikipedia:ru:Жадный алгоритм Радо — Эдмондса | Википедия — Жадный алгоритм Радо-Эдмондса]]  | * [[wikipedia:ru:Жадный алгоритм Радо — Эдмондса | Википедия — Жадный алгоритм Радо-Эдмондса]]  | ||
* [http://www.mathematik.hu-berlin.de/~wilhelm/greedy-vortrag.pdf| Greedy Algorithm And Edmonds Matroid Intersection Algorithm]  | * [http://www.mathematik.hu-berlin.de/~wilhelm/greedy-vortrag.pdf| Greedy Algorithm And Edmonds Matroid Intersection Algorithm]  | ||
| − | * [http://habrahabr.ru/post/120343/| Habrahabr  | + | * [http://habrahabr.ru/post/120343/| Habrahabr — Жадные алгоритмы]  | 
[[Категория:Алгоритмы и структуры данных]]  | [[Категория:Алгоритмы и структуры данных]]  | ||
[[Категория:Матроиды]]  | [[Категория:Матроиды]]  | ||
Версия 00:15, 18 июня 2014
Содержание
Теорема Радо-Эдмондса
| Теорема (Радо-Эдмондса): | 
На носителе матроида  задана весовая функция . Пусть  — множество минимального веса среди независимых подмножеств  мощности . Возьмем , ,  — минимальна.
 Тогда — множество минимального веса среди независимых подмножеств мощности .  | 
| Доказательство: | 
| 
 Рассмотрим — множество минимального веса среди независимых подмножеств мощности . Из определения матроида: . Тогда верны два неравенства:
 Заметим, что величина с двух сторон ограничивает величину . Значит, эти величины равны: . Следовательно, . Таким образом получаем, что если объединить множество с — минимальным из таких, что , — то получим множество минимального веса среди независимых подмножеств мощности . | 
Жадный алгоритм поиска базы минимального веса
| Теорема (жадный алгоритм поиска базы минимального веса): | 
Пусть на носителе матроида  задана весовая функция . Для любого  выполнено: . Тогда база минимального веса матроида  ищется жадно.  | 
| Доказательство: | 
| 
 Пусть ¸ а — время, за которое выполняется проверка множества на независимость. Псевдокод алгоритма: sort(X) // сортируем элементы по возрастанию веса for to if Рассмотрим шаг алгоритма, на котором мы пытаемся добавить элемент . Заметим, что если при его добавлении сохраняется независимость множества , то это элемент минимального веса не из . В самом деле, пусть — элемент минимального веса не из , который можно добавить к с сохранением его независимости, тогда . Но тогда он уже был бы добавлен на -ом шаге алгоритма. Понятно, что все базы имеют одинаковую мощность (иначе в меньшую можно было бы добавить элемент из большей по аксиоме матроидов, что противоречит определению базы). По теореме Радо-Эдмондса множество минимального веса, имеющее мощность базы, (то есть база минимального веса) ищется последовательным добавлением в изначально пустое множество элементов минимального веса из так, чтобы после каждого добавления множество оставалось независимым. Алгоритм работает за . На сортировку элементов из по возрастанию весов уходит . После чего, построение базы выполняется шагов цикла, каждый из которых работает времени. Однако, если считать, что проверка множества на независимость происходит за , асимптотика алгоритма будет | 
Примеры
Графовый матроид
Примером задачи, которая решается с помощью жадного алгоритма, является поиск остовного дерева. Остовное дерево — это база в графовом матроиде. Данная задача решается с помощью алгоритма Краскала. Код данного алгоритма один в один копирует код алгоритма поиска базы минимального веса, который был приведен выше.
Матроид паросочетаний
Типичной задачей из этого класса, является поиск наибольшего паросочетания в двудольном графе. Здесь мы имеем дело с трансверсальным матроидом. Решается эта задача с помощью алгоритма Куна.
Матричный матроид
Рассмотрим задачу о нахождение максимального количества линейно независимых строк в матрице. Возьмем матрицу с действительными кэффициентами . Пусть — множество её строк, — семейство множеств линейно независимых строк. Тогда — матроид. Данная задача, как и задача о решении системы линейных алгебраических уравнений, решается с помощью метода Гаусса[1]