Articles

GeeksforGeeks

biorąc pod uwagę wszechświat U N elementów, zbiór podzbiorów u powiedzmy S = {S1, S2…, Sm} gdzie każdy podzbiór Si Ma powiązany koszt. Znajdź minimalną podkolekcję s, która obejmuje wszystkie elementy U.

przykład:

Dlaczego jest przydatna?
był to jeden z problemów NP-zupełnych Karpa, tak się okazało w 1972 roku. Inne zastosowania: pokrycie krawędzi, pokrycie wierzchołków
ciekawy przykład: IBM znajduje wirusy komputerowe(wikipedia)
Elementy – 5000 znanych wirusów
Zestawy – 9000 ciągów po 20 lub więcej kolejnych bajtów z wirusów, nie znalezionych w „dobrym” kodzie.
znaleziono okładkę zestawu 180. Wystarczy poszukać owych 180 podciÄ … găłw aby zweryfikowaÄ ‡ istnienie znanych wirusăłw komputerowych.

inny przykład: rozważmy General Motors musi kupić pewną ilość zróżnicowanych dostaw i są dostawcy, którzy oferują różne oferty dla różnych kombinacji materiałów (dostawca A: 2 tony stali + 500 płytek za $x; dostawca B: 1 tona stali + 2000 płytek za $y; itp.). Możesz użyć pokrycia zestawu, aby znaleźć najlepszy sposób na uzyskanie wszystkich materiałów przy jednoczesnym zminimalizowaniu kosztów
źródło: http://math.mit.edu/~goemans/18434S06/setcover-tamara.pdf

pokrycie zestawu to np-Hard:
nie ma rozwiązania czasu wielomianowego dostępnego dla tego problemu, ponieważ problemem jest znany problem np-Hard. Istnieje wielomianowy algorytm przybliżający czas chciwy, algorytm chciwy dostarcza algorytm przybliżający Logn.

przykład:
rozważmy powyższy przykład, aby zrozumieć algorytm zachłanny.

pierwsza iteracja:
I = {}

koszt za nowy element dla S1 = koszt(S1)/|S1 – I| = 5/3

koszt za nowy element dla S2 = koszt(S2)/|S2 – I| = 10/2

koszt za nowy element dla S3 = koszt(S3)/|S3 – I| = 3/4

ponieważ S3 ma minimalną wartość S3 jest dodawany, i staje się {1,4,3,2}.

druga iteracja:
I = {1,4,3,2}

koszt za nowy element dla S1 = koszt(S1)/|S1 – I| = 5/0
zauważ, że S1 nie dodaje żadnego nowego elementu do I.

koszt za nowy element dla S2 = koszt(S2)/|S2 – I| = 10/1
zauważ, że S2 dodaje tylko 5 do I.

algorytm greedy zapewnia optymalne rozwiązanie dla powyższego przykładu, ale może nie zapewniać optymalnego rozwiązania przez cały czas. Rozważ następujący przykład.

dowód na to, że powyższy algorytm jest logotypem.
niech OPT będzie kosztem optymalnego rozwiązania. Powiedzmy (k-1) elementy są zakryte przed iteracją powyższego algorytmu. Koszt elementu k ’ th i, który nie został pokryty przed bieżącym krokiem algorytmu chciwego i jest tam w OPT. Ponieważ algorytm chciwy wybiera najbardziej opłacalne Si, koszt na element w wybranym zbiorze musi być mniejszy niż OPT podzielony przez pozostałe elementy. Zatem koszt K ’ tego elementu koszt algorytmu = suma kosztów n elementów

źródło: