NP-полнота задачи ПОКРЫТИЕ МНОЖЕСТВА

В задаче ПОКРЫТИЕ МНОЖЕСТВА дано семейство \(\mathcal F=\{S_1,\ldots,S_m\}\) подмножеств универсума \(S\), причём их объединение равно \(S\), и число \(h\). Требуется определить, можно ли выбрать не более \(h\) множеств, объединение которых равно всему \(S\).1

Задача NP-полна. В курсе NP-трудность доказывается сведением VERTEX COVER к SET COVER: универсумом делают рёбра исходного графа, а каждой вершине сопоставляют множество инцидентных ей рёбер.1

Что важно запомнить
  • Сертификат — список не более \(h\) выбранных подмножеств. Проверить их объединение можно полиномиально.
  • В сведении из VERTEX COVER универсум \(S\) равен множеству рёбер \(E\).1
  • Вершине \(v\) соответствует множество всех рёбер, инцидентных \(v\).
  • Выбор не более \(l\) вершин, покрывающих все рёбра, эквивалентен выбору не более \(h=l\) соответствующих подмножеств, покрывающих \(S\).

Сведение VERTEX COVER к SET COVER

Пусть дан граф \(G=(V,E)\) и число \(l\). Строим экземпляр SET COVER:

  • универсум \(S=E\);
  • для каждой вершины \(v_j\in V\) множество \(S_j=\{e\in E: e\text{ инцидентно }v_j\}\);
  • параметр \(h=l\).

Если \(R=\{v_{i_1},\ldots,v_{i_r}\}\), \(r\le l\), является вершинным покрытием, то каждое ребро инцидентно хотя бы одной вершине из \(R\). Следовательно, \(S_{i_1}\cup\cdots\cup S_{i_r}=E=S\), то есть соответствующие множества дают покрытие универсума.

Обратно, если не более \(h\) множеств \(S_{i_1},\ldots,S_{i_r}\) покрывают весь универсум \(E\), то каждое ребро принадлежит хотя бы одному из них и потому инцидентно одной из вершин \(v_{i_1},\ldots,v_{i_r}\). Эти вершины образуют вершинное покрытие размера не более \(l\).1

Построение семейств инцидентных рёбер имеет полиномиальный размер, поэтому \(VERTEX\ COVER\prec SET\ COVER\). Вместе с принадлежностью \(NP\) получаем NP-полноту.

Частые ошибки
  • Путать decision SET COVER с оптимизационной задачей поиска минимального числа множеств. NP-полнота здесь относится к вопросу «существует ли покрытие размера не более \(h\)?».
  • В сведении брать универсумом вершины графа. В конструкции курса универсумом служит именно множество рёбер.
  • Считать, что множества \(S_j\) должны быть непересекающимися. Для покрытия пересечения допустимы и обычны.

Другие вопросы

Источники

  1. 1 Сапоженко А. А. Некоторые вопросы сложности алгоритмов М.: МГУ, факультет ВМК, 2001 г., §6, теорема 6.4: ВЕРШИННОЕ ПОКРЫТИЕ ≺ ПОКРЫТИЕ МНОЖЕСТВ