Взвешенный матроид
В комбинаторике , разделе математики , взвешенный матроид — это матроид, наделенный функцией, которая присваивает вес каждому элементу. Формально пусть быть матроидом, где E — множество элементов, а I — семейство независимых множеств. Взвешенный матроид имеет весовую функцию for присваивает строго положительный вес каждому элементу . Распространяем функцию на подмножества путем суммирования; это сумма над в .
Нахождение независимого множества максимального веса
[ редактировать ]Основная проблема взвешенных матроидов — найти независимый набор с максимальным общим весом. Эту проблему можно решить с помощью следующего простого жадного алгоритма :
- Инициализируйте набор A пустым набором. Обратите внимание, что по определению матроида A является независимым множеством.
- Для каждого элемента x в E \ A проверьте, является ли Au{x} независимым множеством.
- Если таких элементов нет, то остановитесь, так как A больше не может быть расширен.
- Если есть хотя бы один такой элемент, то выберите тот, у которого максимальный вес, и добавьте его в A.
Этому алгоритму не нужно ничего знать о структуре матроида; ему просто нужен оракул независимости для матроида - подпрограмма для проверки того, является ли набор независимым.
Джек Эдмондс [1] доказал, что этот простой алгоритм действительно находит независимое множество с максимальным весом. Обозначим найденное алгоритмом множество через e 1 ,..., ek . Из свойств матроида ясно, что k=rank(M), иначе множество можно было бы расширить. Предположим от противного, что существует другое множество с большим весом. Без ограничения общности можно предположить, что это множество тоже имеет элементы ранга(М); обозначим его через f 1 ,...,f k . Упорядочите эти элементы так, чтобы w(f 1 ) ≥ ... ≥ w(f k ). Пусть j будет первым индексом, для которого w(f j ) > w(e j ). Примените свойство увеличения к наборам {f 1 ,...,f j } и {e 1 ,...,e j-1 }; мы заключаем, что должен существовать некоторый i ⩽ j такой, что f i можно было бы добавить к {e 1 ,...,e j-1 }, сохраняя при этом его независимость. Но w(fi ) ≥ w(f j ) > w(e j ), поэтому следовало выбрать fi на шаге j вместо e j - противоречие. [2]
Пример: алгоритмы охватывающего леса
[ редактировать ]В качестве простого примера предположим, что мы хотим найти максимальный остовный лес графа. То есть, зная граф и вес каждого ребра, найдите лес, содержащий каждую вершину и максимизирующий общий вес ребер в дереве. Эта проблема возникает в некоторых приложениях кластеризации. Ее можно решить с помощью алгоритма Краскала , который можно рассматривать как частный случай описанного выше жадного алгоритма для графического матроида .
Если мы посмотрим на определение лесного матроида, то увидим, что максимальный остовный лес — это просто независимый набор с наибольшим общим весом — такой набор должен охватывать граф, иначе мы можем добавлять ребра без создания циклов. Но как нам его найти?
В поисках основы
[ редактировать ]Существует простой алгоритм поиска основы:
- Первоначально пусть быть пустым множеством.
- Для каждого в
- если независима, то положим к .
В результате получается, очевидно, независимое множество. Это максимальное независимое множество, потому что если не является независимым для некоторого подмножества из , затем также не является независимым (противоположное следует из наследственного свойства ). Таким образом, если мы пропустим элемент, у нас никогда не будет возможности использовать его позже. Мы обобщим этот алгоритм для решения более сложной задачи.
Расширение до оптимального
[ редактировать ]Независимый набор наибольшего общего веса называется оптимальным набором. Оптимальные наборы всегда являются базовыми, потому что если можно добавить ребро, то так и должно быть; это только увеличивает общий вес. Как оказалось, существует тривиальный жадный алгоритм вычисления оптимального набора взвешенных матроидов. Это работает следующим образом:
- Первоначально пусть быть пустым множеством.
- Для каждого в , взятые в (монотонном) порядке убывания веса
- если независима, то положим к .
Этот алгоритм находит базис, поскольку является частным случаем приведенного выше алгоритма. Он всегда выбирает элемент наибольшего веса, который может, сохраняя при этом независимость (отсюда и термин «жадный»). Это всегда дает оптимальный набор: предположим, что он производит и это . Теперь для любого с , рассмотрим открытые множества и . С меньше, чем , есть какой-то элемент который можно положить в при этом результат по-прежнему остается независимым. Однако — элемент максимального веса, который можно добавить к для сохранения независимости. Таким образом имеет не меньший вес, чем некоторый элемент , и, следовательно, имеет по крайней мере большой вес, так как . Поскольку это верно для всех , тяжелее, чем .
Анализ сложности
[ редактировать ]Самый простой способ обойти члены в желаемом порядке — отсортировать их. Это требует сравнения время с использованием алгоритма сортировки . Нам также необходимо протестировать каждый ли является независимым; предполагая, что тесты независимости требуют время, общее время работы алгоритма .
Если вместо этого мы хотим найти минимальное остовное дерево, мы просто «инвертируем» весовую функцию, вычитая ее из большой константы. Точнее, пусть , где превышает общий вес по всем ребрам графа. Этим тривиальным способом можно решить гораздо больше задач по оптимизации всех видов матроидов и весовых функций, хотя во многих случаях можно найти более эффективные алгоритмы, использующие более специализированные свойства.
Требование Матроида
[ редактировать ]Заметим также, что если мы возьмем набор «независимых» множеств, которые являются даун-множествами, но не матроидами, то жадный алгоритм не всегда будет работать. Ибо тогда существуют независимые множества и с , но такой, что ни за что является независимый.
Выберите и такой, что . Взвесьте элементы в диапазоне к , элементы в диапазоне к , элементы в диапазоне к , а остальное в диапазоне к . Жадный алгоритм выберет элементы , а затем не может выбрать ни одного элемента . Следовательно, построенное им независимое множество будет иметь вес не более , что меньше веса .
Характеристика
[ редактировать ]Этот алгоритм оптимизации можно использовать для характеристики матроидов: если семейство F множеств, замкнутое относительно взятия подмножеств, обладает свойством, что независимо от того, как взвешены множества, жадный алгоритм находит в семействе множество с максимальным весом, то F должно быть семейством независимых множеств матроида. [3]
Обобщения
[ редактировать ]Понятие матроида было обобщено, чтобы учесть другие типы множеств, на которых жадный алгоритм дает оптимальные решения; см. в разделе «Встраивание Greedoid и Maroid» дополнительную информацию . Корте и Ловас обобщили бы эти идеи на объекты, называемые жадными алгоритмами , которые позволяют решать еще более широкие классы задач с помощью жадных алгоритмов.
Ссылки
[ редактировать ]- ^ Эдмондс, Джек (1971). «Матроиды и жадный алгоритм» . Математическое программирование . 1 (1): 127–136. дои : 10.1007/BF01584082 .
- ^ Гретшель, Мартин ; Ловас, Ласло ; Шрийвер, Александр (1993). Геометрические алгоритмы и комбинаторная оптимизация . Алгоритмы и комбинаторика. Том 2 (Второе изд.). Шпрингер Верлаг, Берлин. п. 212. дои : 10.1007/978-3-642-78240-4 . ISBN 3-540-56740-2 . МР 1261419 .
- ^ Оксли, Джеймс Г. (1992). Теория Матроида . Оксфордские научные публикации. Оксфорд: Издательство Оксфордского университета . п. 64. ИСБН 0-19-853563-5 . Збл 0784.05002 .