Задача о вершинном покрытии — NP-полная задача информатики в области теории графов. Часто используется в теории сложности для доказательства NP-полноты более сложных задач.
Вершинное покрытие для неориентированного графа G = ( V , E ) {\displaystyle G=(V,E)} — это множество его вершин S {\displaystyle S} , такое, что, у каждого ребра графа хотя бы один из концов входит в вершину из S {\displaystyle S} .
Размером (size) вершинного покрытия называется число входящих в него вершин.
Пример: Граф, изображённый справа, имеет вершинное покрытие { 1 , 3 , 5 , 6 } {\displaystyle \{1,3,5,6\}} размера 4. Однако оно не является наименьшим вершинным покрытием, поскольку существуют вершинные покрытия меньшего размера, такие как { 2 , 4 , 5 } {\displaystyle \{2,4,5\}} и { 1 , 2 , 4 } {\displaystyle \{1,2,4\}} .
Задача о вершинном покрытии состоит в поиске вершинного покрытия наименьшего размера для заданного графа (этот размер называется числом вершинного покрытия графа).
Также вопрос можно ставить как эквивалентную задачу разрешения:
Задача о вершинном покрытии сходна с задачей о независимом множестве. Поскольку множество вершин C {\displaystyle C} является вершинным покрытием тогда и только тогда, когда его дополнение V ∖ C {\displaystyle V\setminus C} является независимым множеством, задачи сводятся друг к другу.
Поскольку задача о вершинном покрытии является NP-полной, то, к сожалению, неизвестны алгоритмы для её решения за полиномиальное время. Однако существуют аппроксимационные алгоритмы, дающие «приближённое» решение этой задачи за полиномиальное время — можно найти вершинное покрытие, в котором число вершин не более чем вдвое превосходит минимально возможное.
Один из первых, приходящих в голову, подходов решения задачи - аппроксимация через жадный алгоритм: Необходимо добавлять вершины с максимальным количеством соседей в вершинное покрытие, пока задача не будет решена, однако такое решение не имеет ρ {\displaystyle \rho } -аппроксимации для любого константного ρ {\displaystyle \rho } .
Другой вариант решения - нахождение максимального паросочетания M ∈ E {\displaystyle M\in E} на данном графе G = ( V , E ) {\displaystyle G=(V,E)} и выбор в качестве вершинного покрытия множества C = ⋃ e ∈ M e {\displaystyle C=\bigcup _{e\in M}e} . Корректность такого алгоритма доказывается от противного: Если C {\displaystyle C} не является вершинным покрытием (не обязательно наименьшим), т.е. ∃ e : e ∩ C = ∅ {\displaystyle \exists e\colon e\cap C=\emptyset } , то M {\displaystyle M} не является максимальным паросочетанием. Фактор аппроксимации же доказывается следующим образом: Пусть τ ( G ) = | V | − α ( G ) {\displaystyle \tau (G)=|V|-\alpha (G)} , где α ( G ) {\displaystyle \alpha (G)} - число независимости графа G {\displaystyle G} , и M m a x ( G ) {\displaystyle M_{max}(G)} - наибольшее паросочетание графа G {\displaystyle G} . Тогда фактор аппроксимации равен 2 ⋅ | M | τ ( G ) ⩽ 2 ⋅ | M m a x ( G ) | τ ( G ) ⩽ 2 ⋅ | M m a x ( G ) | | M m a x ( G ) | = 2 {\displaystyle {\frac {2\cdot |M|}{\tau (G)}}\leqslant {\frac {2\cdot |M_{max}(G)|}{\tau (G)}}\leqslant {\frac {2\cdot |M_{max}(G)|}{|M_{max}(G)|}}=2} .
В общем случае задача о вершинном покрытии может быть аппроксимирована с фактором 2 − log log n 2 ⋅ log n {\displaystyle 2-{\frac {\log \log n}{2\cdot \log n}}} .
В двудольных графах задача о вершинном покрытии разрешима за полиномиальное время, поскольку сводится к задаче о наибольшем паросочетании (Теорема Кёнига).