DAA - Vertex Cover
Pokrycie wierzchołka niekierunkowego grafu G = (V, E) jest podzbiorem wierzchołków V' ⊆ V takie, że jeśli krawędź (u, v) jest krawędzią G, to albo u w V lub v w V' lub obydwa.
Znajdź pokrycie wierzchołków o maksymalnym rozmiarze na podanym wykresie niekierowanym. To optymalne pokrycie wierzchołków jest optymalizacyjną wersją problemu NP-zupełnego. Jednak nie jest zbyt trudno znaleźć pokrycie wierzchołków, które jest bliskie optymalnej.
APPROX-VERTEX_COVER (G: Graph) c ← { } E' ← E[G]
while E' is not empty do
Let (u, v) be an arbitrary edge of E' c ← c U {u, v}
Remove from E' every edge incident on either u or v
return c
Przykład
Zbiór krawędzi danego wykresu to -
{(1,6),(1,2),(1,4),(2,3),(2,4),(6,7),(4,7),(7,8),(3,8),(3,5),(8,5)}
Teraz zaczynamy od wybrania dowolnej krawędzi (1,6). Eliminujemy wszystkie krawędzie, które padają na wierzchołek 1 lub 6 i dodajemy krawędź (1,6) do pokrycia.
W następnym kroku wybraliśmy losowo kolejną krawędź (2,3)
Teraz wybieramy inną krawędź (4,7).
Wybieramy inną krawędź (8,5).
Stąd pokrycie wierzchołków tego wykresu wynosi {1, 2, 4, 5}.
Analiza
Łatwo zauważyć, że czas działania tego algorytmu to O(V + E), używając do reprezentowania listy sąsiedztwa E'.