Минимальная кардинальная версия - NP-Complete. Установить обложку можно уменьшить до этого.Требование максимума среди тех только усложняет задачу.
Кстати, другой ответ, говорящий о булевой выполнимости, - неправильно !Вам нужно уменьшить логическую удовлетворенность этой проблемы, чтобы показать NP-полноту, а не наоборот.
Обложка набора в основном:
Дайте коллекцию наборов S1, S2, ...Sn подмножеств множества X, найдите наименьшее подмножество (с точки зрения количества множеств), объединение которого охватывает все элементы в S1 U S2 U ... U Sn.
Чтобы уменьшить это до нашегозадача,
Пусть S = S1 U S2 ... U Sn.= {x1, x2, ..., xm}
Пусть C_i = {j такое, что xi находится в Sj}
Подайте C_i в нашу проблему.
Теперьесли наша задача была решаема за полиномиальное время, и мы могли бы найти минимальный набор элементов C_i, то мы можем найти покрытие набора для Si и наоборот.
Обычно это можно решить как целочисленное программирование.задача (которая также NP-Hard).
Для приближенных решений это можно рассматривать как задачу линейного программирования (которая имеет алгоритмы полиномиального времени), и можно выполнить рандомизированное округление для преобразования дробных значений (решенияLP) целым числам.
Также, к сожалению, было показано, что это NP-трудно приблизить даже к постоянному коэффициенту (фактически я считаю, что это O (logn)).