Жадный алгоритм поиска базы минимального веса — различия между версиями
Строка 8: | Строка 8: | ||
<tex>sort(X)</tex> // сортируем элементы по возрастанию веса | <tex>sort(X)</tex> // сортируем элементы по возрастанию веса | ||
<tex>B \leftarrow \emptyset</tex> | <tex>B \leftarrow \emptyset</tex> | ||
− | '''for''' <tex>i \leftarrow 0</tex> '''to''' <tex> | + | '''for''' <tex>i \leftarrow 0</tex> '''to''' <tex>|X|-1</tex> '''do''' |
'''if''' <tex>B \cup X[i] \in I</tex> | '''if''' <tex>B \cup X[i] \in I</tex> | ||
<tex>B \leftarrow B \cup X[i]</tex> | <tex>B \leftarrow B \cup X[i]</tex> | ||
Строка 15: | Строка 15: | ||
Понятно, что все базы имеют одинаковую мощность (иначе в меньшую можно было бы добавить элемент из большей по аксиоме матроидов, что противоречит определению базы). По [[Теорема Радо-Эдмондса (жадный алгоритм)|теореме Радо-Эдмондса]] множество минимального веса, имеющее мощность базы, (то есть база минимального веса) ищется последовательным добавлением в изначально пустое множество элементов минимального веса из <tex>X</tex> так, чтобы после каждого добавления множество оставалось независимым. | Понятно, что все базы имеют одинаковую мощность (иначе в меньшую можно было бы добавить элемент из большей по аксиоме матроидов, что противоречит определению базы). По [[Теорема Радо-Эдмондса (жадный алгоритм)|теореме Радо-Эдмондса]] множество минимального веса, имеющее мощность базы, (то есть база минимального веса) ищется последовательным добавлением в изначально пустое множество элементов минимального веса из <tex>X</tex> так, чтобы после каждого добавления множество оставалось независимым. | ||
− | Алгоритм работает за <tex>O( | + | Алгоритм работает за <tex>O(|X| \log(|X|))</tex>. На сортировку элементов из <tex>X</tex> по возрастанию весов уходит <tex>O(|X| \log(|X|))</tex> и <tex>O(\mid X \mid)</tex> шагов цикла, каждый из которых работает <tex>O(1)</tex> времени (если считать, что проверка множества на независимость происходит за <tex>O(1)</tex>). |
}} | }} |
Версия 01:11, 18 мая 2011
Теорема (жадный алгоритм поиска базы минимального веса): |
Пусть на носителе матроида задана весовая функция . Для любого выполнено: . Тогда база минимального веса матроида ищется жадно. |
Доказательство: |
Псевдокод алгоритма: // сортируем элементы по возрастанию веса for to do if Рассмотрим шаг алгоритма, когда мы пытаемся добавить элемент . Заметим, что если его можно добавить с сохранением независимости множества , то это элемент минимального веса не из , который можно добавить (при условии сохранения независимости при добавлении). В самом деле, пусть — элемент минимального веса не из , который можно добавить к с сохранением его независимости, тогда . Но тогда он уже был бы добавлен на -ом шаге алгоритма.Понятно, что все базы имеют одинаковую мощность (иначе в меньшую можно было бы добавить элемент из большей по аксиоме матроидов, что противоречит определению базы). По теореме Радо-Эдмондса множество минимального веса, имеющее мощность базы, (то есть база минимального веса) ищется последовательным добавлением в изначально пустое множество элементов минимального веса из так, чтобы после каждого добавления множество оставалось независимым. Алгоритм работает за . На сортировку элементов из по возрастанию весов уходит и шагов цикла, каждый из которых работает времени (если считать, что проверка множества на независимость происходит за ). |