Задача о покрытии множестваЗадача о покрытии множества является классическим вопросом информатики и теории сложности. Данная задача обобщает NP-полную задачу о вершинном покрытии (и потому является NP-сложной). Несмотря на то, что задача о вершинном покрытии сходна с данной, подход, использованный в приближённом алгоритме, здесь не работает. Вместо этого мы рассмотрим жадный алгоритм. Даваемое им решение будет хуже оптимального в логарифмическое число раз. С ростом размера задачи качество решения ухудшается, но всё же довольно медленно, поэтому такой подход можно считать полезным. Формулировка задачиИсходными данными задачи о покрытии множества является конечное множество и семейство его подмножеств. Покрытием называют семейство наименьшей мощности, объединением которых является . В случае постановки вопроса о разрешении на вход подаётся пара и целое число ; вопросом является существование покрывающего множества мощности (или менее). ПримерВ качестве примера задачи о покрытии множества можно привести следующую проблему: представим себе, что для выполнения какого-то задания необходим некий набор навыков . Также есть группа людей, каждый из которых владеет некоторыми из этих навыков. Необходимо сформировать наименьшую подгруппу, достаточную для выполнения задания, т. е. включающую в себя носителей всех необходимых навыков. Методы решенияЖадный приближенный алгоритмЖадный алгоритм выбирает множества, руководствуясь следующим правилом: на каждом этапе выбирается множество, покрывающее максимальное число ещё не покрытых элементов.
Можно показать, что этот алгоритм работает с точностью , где — мощность наибольшего множества, а — это сумма первых членов гармонического ряда. Другими словами, алгоритм находит покрытие, размер которого не более чем в раз превосходит размер минимального покрытия. Теорема Фейге гласит, что для задачи о покрытии множества не существует алгоритма с фактором аппроксимации , т.к. иначе класс сложности NP был бы равен классу сложности TIME().[1] Таким образом жадный алгоритм - лучший аппроксимационный алгоритм для задачи о покрытии множества. Существует стандартный пример, на котором жадный алгоритм работает с точностью . Универсум состоит из элементов. Набор множеств состоит из попарно не пересекающихся множеств , мощности которых соответственно. Также имеются два непересекающихся множества , каждое из которых содержит половину элементов из каждого . На таком наборе жадный алгоритм выбирает множества , тогда как оптимальным решением является выбор множеств и Пример подобных входных данных для можно увидеть на рисунке справа. Генетический алгоритмГенетический алгоритм представляет собой эвристический метод случайного поиска, основанный на принципе имитации эволюции биологической популяции. В общем случае в процессе работы алгоритма происходит последовательная смена популяций, каждая из которых является семейством покрытий, называемых особями популяции. Покрытия начальной популяции строятся случайным образом. Наиболее распространённая и лучше всего зарекомендовавшая себя — стационарная схема генетического алгоритма, в которой очередная популяция отличается от предыдущей лишь одной или двумя новыми особями. При построении новой особи из текущей популяции с учётом весов покрытий выбирается «родительская» пара особей , и на их основе в процедуре кроссинговера (случайно или детерминированно) формируется некоторый набор покрывающих множеств . Далее подвергается мутации, после чего из него строится особь, которая замещает в новой популяции покрытие с наибольшим весом. Обновление популяции выполняется некоторое(заданное) число раз, и результатом работы алгоритма является лучшее из найденных покрытий. Точное решениеЧасто задача о покрытии множества формулируется, как задача целочисленного программирования[2]: Требуется найти , где — матрица, причём = 1, если , и = 0 в противном случае; обозначает — вектор из единиц; ; — вектор, где , если входит в покрытие, иначе . Точное решение может быть получено за полиномиальное время, в случае, когда матрица вполне унимодулярна. Сюда можно отнести и задачу о вершинном покрытии на двудольном графе и дереве. В частности, когда каждый столбец матрицы содержит ровно две единицы, задачу можно рассматривать как задачу рёберного покрытия графа, которая эффективно сводится к поиску максимального паросочетания. На классах задач, где или ограничены константой, задача за полиномиальное время решается методами полного перебора. Схожие задачиЛитература
Примечания
Ссылки |