Теорема Радо-Эдмондса (жадный алгоритм) — различия между версиями
Firespace (обсуждение | вклад) |
Firespace (обсуждение | вклад) |
||
Строка 47: | Строка 47: | ||
== Примеры == | == Примеры == | ||
− | |||
− | + | === Графовый матроид === | |
+ | Типичным примером задачи, которая решается с помощью жадного алгоритма, является поиск остовного дерева. Остовное дерево — это база в графовом матроиде. Данная задача решается с помощью [[Алгоритм Краскала| алгоритма Краскала]] | ||
− | + | === Матроид паросочетаний === | |
+ | Еще одной типичной задачей из этого класса, является поиск наибольшего паросочетания в двудольном графе. Здесь мы имеем дело с трансверсальным матроидом. Решается эта задача с помощью [[Алгоритм Куна для поиска максимального паросочетания| Алгоритма Куна]]. | ||
− | === | + | === Матричный матроид === |
− | = | + | Последней задачей, которую мы рассмотрим, будет нахождение максимального количества линейно независимых строк в матрице. Рассмотрим матрицу с действительными кэффициентами <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> |
− | + | == См. также == | |
− | |||
− | == См. также == | ||
* [[Теорема о базах]] | * [[Теорема о базах]] | ||
* [[Теорема Эдмондса-Лоулера]] | * [[Теорема Эдмондса-Лоулера]] | ||
+ | |||
+ | == Примечания == | ||
+ | <references /> | ||
== Источники информации == | == Источники информации == |
Версия 23:31, 17 июня 2014
Содержание
Теорема Радо-Эдмондса
Теорема (Радо-Эдмондса): |
На носителе матроида задана весовая функция . Пусть — множество минимального веса среди независимых подмножеств мощности . Возьмем , , — минимальна.
Тогда — множество минимального веса среди независимых подмножеств мощности . |
Доказательство: |
Рассмотрим — множество минимального веса среди независимых подмножеств мощности .Из определения матроида: .Тогда верны два неравенства:
Заметим, что величина с двух сторон ограничивает величину . Значит, эти величины равны: .Следовательно, Таким образом получаем, что если объединить множество . с — минимальным из таких, что , — то получим множество минимального веса среди независимых подмножеств мощности . |
Жадный алгоритм поиска базы минимального веса
Теорема (жадный алгоритм поиска базы минимального веса): |
Пусть на носителе матроида задана весовая функция . Для любого выполнено: . Тогда база минимального веса матроида ищется жадно. |
Доказательство: |
Пусть ¸ а — время, за которое выполняется проверка множества на независимость.Псевдокод алгоритма: sort(X) // сортируем элементы по возрастанию веса for to if Рассмотрим шаг алгоритма, на котором мы пытаемся добавить элемент . Заметим, что если при его добавлении сохраняется независимость множества , то это элемент минимального веса не из . В самом деле, пусть — элемент минимального веса не из , который можно добавить к с сохранением его независимости, тогда . Но тогда он уже был бы добавлен на -ом шаге алгоритма.Понятно, что все базы имеют одинаковую мощность (иначе в меньшую можно было бы добавить элемент из большей по аксиоме матроидов, что противоречит определению базы). По теореме Радо-Эдмондса множество минимального веса, имеющее мощность базы, (то есть база минимального веса) ищется последовательным добавлением в изначально пустое множество элементов минимального веса из так, чтобы после каждого добавления множество оставалось независимым. Алгоритм работает за . На сортировку элементов из по возрастанию весов уходит . После чего, построение базы выполняется шагов цикла, каждый из которых работает времени. Однако, если считать, что проверка множества на независимость происходит за , асимптотика алгоритма будет |
Примеры
Графовый матроид
Типичным примером задачи, которая решается с помощью жадного алгоритма, является поиск остовного дерева. Остовное дерево — это база в графовом матроиде. Данная задача решается с помощью алгоритма Краскала
Матроид паросочетаний
Еще одной типичной задачей из этого класса, является поиск наибольшего паросочетания в двудольном графе. Здесь мы имеем дело с трансверсальным матроидом. Решается эта задача с помощью Алгоритма Куна.
Матричный матроид
Последней задачей, которую мы рассмотрим, будет нахождение максимального количества линейно независимых строк в матрице. Рассмотрим матрицу с действительными кэффициентами [1]
. Пусть — множество её строк, — семейство множеств линейно независимых строк. Тогда — матроид. Задача решается с помощью метода Гаусса