Articles

GeeksforGeeks

Vzhledem k tomu, vesmír, U z n prvků, sbírka podmnožiny U S = {S1, S2,…, Sm}, kde každá podskupina Si má přidružené náklady. Najděte minimální nákladovou sbírku S, která pokrývá všechny prvky u.

příklad:

proč je to užitečné?
byl to jeden z karpových NP-úplných problémů, jak se ukázalo v roce 1972. Další aplikace: krytí hran, krytí vrcholů
zajímavý příklad: IBM najde počítačové viry(wikipedia)
prvky-5000 známých virů
sady – 9000 podřetězců 20 nebo více po sobě jdoucích bajtů z virů, které nebyly nalezeny v „dobrém“ kódu.
byl nalezen kryt sady 180. Stačí vyhledat těchto 180 podřetězců, aby se ověřila existence známých počítačových virů.

Další příklad: Uvažujme General Motors potřebuje koupit určité množství rozmanitých potřeb a existují dodavatelé, kteří nabízejí různé nabídky pro různé kombinace materiálů (Dodavatel A: 2 tun oceli + 500 dlaždice pro $x; Dodavatel B: 1 tunu oceli + 2000 dlaždice pro $y; atd.). Můžete použít sadu pokrývající najít nejlepší způsob, jak získat všechny materiály, které při minimalizaci nákladů
Zdroj: http://math.mit.edu/~goemans/18434S06/setcover-tamara.pdf

Nastavte Pokrytí je NP-Těžký:
Neexistuje žádný polynomiální čas řešení je k dispozici pro tento problém jako problém je známý NP-Těžký problém. Existuje polynomiální čas chamtivý přibližný algoritmus, chamtivý algoritmus poskytuje logn přibližný algoritmus.

příklad:
uvažujme výše uvedený příklad, abychom pochopili chamtivý algoritmus.

první iterace:
I = {}

za nový prvek nákladů pro S1 = Náklady(S1)/|S1 – I| = 5/3.

za nový prvek nákladů pro S2 = Náklady(S2)/|S2 – I| = 10/2,

za nový prvek nákladů pro S3 = Náklady(S3)/|S3 – I| = 3/4,

Protože S3 má minimální hodnota S3 je přidáno, já se stává {1,4,3,2}.

Druhá Iterace:
I = {1,4,3,2}

za nový prvek nákladů pro S1 = Náklady(S1)/|S1 – I| = 5/0
Všimněte si, že S1 nepřidává žádný nový prvek.

za nový prvek nákladů pro S2 = Náklady(S2)/|S2 – I| = 10/1
Všimněte si, že S2 se přidá pouze 5 I.

chamtivý algoritmus poskytuje optimální řešení pro výše uvedený příklad, ale nemusí poskytovat optimální řešení po celou dobu. Zvažte následující příklad.

důkaz, že výše uvedený chamtivý algoritmus je Logn přibližný.
Nechť OPT je cena optimálního řešení. Say (k-1) prvky jsou pokryty před iterací výše chamtivého algoritmu. Náklady na k ‚ tý prvek i, který nebyl pokryt před aktuálním krokem chamtivého algoritmu a je tam v OPT. Vzhledem k tomu, greedy algoritmus vybere nejvíce nákladově efektivní Si, per-element-náklady ve vybraném souboru musí být menší než OPT děleno zbývajícími prvky. Proto náklady na k ‚ tý element náklady na chamtivý algoritmus = součet nákladů na n elementy

zdroj: