GeeksforGeeks
koska universumi U koostuu n: n elementeistä, kokoelma osajoukkoja U say s = {S1, S2…,Sm} missä jokaisella osajoukolla Si on siihen liittyvä kustannus. Etsi S: n vähimmäiskustannuskokoelma, joka kattaa kaikki U: n elementit.
esimerkki:
miksi se on hyödyllinen?
Se oli yksi karpin NP-täydellisistä ongelmista, jotka osoitettiin sellaisiksi vuonna 1972. Muita käyttökohteita: reunapeite, vertex-kansi
mielenkiintoinen esimerkki: IBM löytää tietokoneviruksia (wikipedia)
alkuaineita – 5000 tunnettua virusta
sarjaa – 9000 alustaa vähintään 20 peräkkäistä tavua viruksista, joita ei löydy ”hyvästä” koodista.
joukosta löytyi 180 kappaleen kansikuva. Riittää etsiä näitä 180 substraatteja todentaa olemassa tunnettuja tietokoneviruksia.
toinen esimerkki: harkitse General Motorsin tarvetta ostaa tietty määrä erilaisia tarvikkeita ja on olemassa toimittajia, jotka tarjoavat erilaisia tarjouksia eri materiaaliyhdistelmistä (toimittaja A: 2 tonnia terästä + 500 laattaa $x; toimittaja B: 1 tonni terästä + 2000 laattaa $y; jne.). Voit käyttää set covering löytää paras tapa saada kaikki materiaalit minimoimalla kustannukset
Source: http://math.mit.edu/~goemans/18434S06/setcover-tamara.pdf
Set Cover is NP-Hard:
tähän ongelmaan ei ole polynomiaikaratkaisua, koska ongelma on tunnettu NP-Hard problem. On polynomi aika ahne likimääräinen algoritmi, ahne algoritmi tarjoaa Logn likimääräinen algoritmi.
esimerkki:
Tarkastellaanpa yllä olevaa esimerkkiä ahneen algoritmin ymmärtämiseksi.
ensimmäinen iterointi:
I = {}
uuden elementin kustannukset S1 = kustannus(S1)/|S1 – I| = 5/3
uuden elementin kustannukset S2 = kustannus(S2)/|S2 – I| = 10/2
uuden elementin kustannukset S3 = kustannus(S3)/|S3 – I| = 3/4
koska S3: lla on vähimmäisarvo S3 lisätään, I tulee {1,4,3,2}.
toinen iteraatio:
I = {1,4,3,2}
uuden elementin kustannus S1 = kustannus(S1)|| S1 – I/ = 5/0
Huomaa, että S1 ei lisää I: een mitään uutta elementtiä.
uuden elementin kustannus S2 = kustannus(S2)|| S2 – I / = 10/1
Huomaa, että S2 lisää I: een vain 5.
ahne algoritmi tarjoaa yllä olevaan esimerkkiin optimaalisen ratkaisun, mutta se ei välttämättä tarjoa optimaalista ratkaisua koko ajan. Harkitsehan seuraavaa esimerkkiä.
todiste siitä, että yllä oleva ahne algoritmi on Logn-likimääräinen.
olkoon OPT optimaalisen ratkaisun hinta. Say (k-1) elementit katetaan ennen iterointia edellä ahne algoritmi. Kustannukset k ’ TH Elementti i, joka ei ole katettu ennen nykyistä vaihetta ahne algoritmi ja se on siellä OPT. Koska ahne algoritmi poimii kustannustehokkaimman Si: n, per-element-cost poimitussa sarjassa on oltava pienempi kuin OPT jaettuna jäljellä olevilla elementeillä. Siksi K ’ TH elementin kustannus ahneen algoritmin kustannus = n elementtien kustannusten summa
lähde: