Вы ищете минимальное покрытие набора множества E \ {r} с отрицаниями (дополнениями) тех свойств, которым принадлежит r (свойства могут рассматриваться как подмножества E).
Поскольку эти наборы могут быть любыми, это NP-сложный.
Точнее:
Наличие установленного экземпляра обложки (U
, S
), где U
- это набор, который нужно покрыть, и S
= {s1
, s2
, ..., sn
} - это семейство покрывающих множеств, вы можете построить экземпляр вашей задачи так, чтобы ее решение давало покрытие множеств в исходной задаче:
E
= U
\ union {r
}, где r
является референтом, а r
не принадлежит U
.
Набор свойств P
= {p1
, p2
, ..., pn
} составлен из S
, так что для каждого e
в U
и каждого i
так, что 1 <= <code>i <= n у нас есть <code>pi (e
), если e
не в si
. Более того, каждое свойство верно для r
. Другими словами, свойства являются дополнением к исходным наборам, если они ограничены U
, а r
имеет все свойства.
Теперь ясно, что каждый набор свойств, который выбирает r
, является набором покрытия в исходной задаче - если r
выбран набором S*
свойств, то все остальные элементы (это означает, что все те в U
) произойдет сбой хотя бы одного свойства в S*
, поэтому каждый элемент U
принадлежит хотя бы одному исходному набору (из конструирования свойств как дополнения к наборам). Это означает, что U
является объединением тех множеств, из которых были построены свойства в S*
.
Обратное также верно - набор обложек в U
переводится в r
-выборный набор в E
.
Вышеприведенное сокращение, очевидно, является полиномиальным, поэтому проблема NP-трудна.