GeeksforGeeks
adott univerzum U nak, – nek n elemek, u részhalmazainak gyűjteménye mondjuk S = {S1,S2…, SM} ahol minden Részhalmaznak Si van társított költsége. Keresse meg az S minimális költségű részgyűjteményét, amely lefedi az U összes elemét.
példa:
miért hasznos?
Ez volt Karp egyik NP-teljes problémája, amelyet 1972-ben mutattak ki. Egyéb alkalmazások: élburkolat, csúcsfedél
érdekes példa: IBM találja számítógépes vírusok (wikipedia)
elemek – 5000 ismert vírusok
készletek – 9000 substrings 20 vagy több egymást követő Byte vírusok, nem található a ‘jó’ kódot.
egy sor fedelet 180 találtak. Elegendő ezeket a 180 szubsztrátumot keresni az ismert számítógépes vírusok létezésének igazolására.
egy másik példa: fontolja meg, hogy a General Motorsnak bizonyos mennyiségű változatos kelléket kell vásárolnia, és vannak olyan beszállítók, akik különféle ajánlatokat kínálnak különböző anyagkombinációkhoz (a szállító: 2 tonna acél + 500 csempe x dollárért; B szállító: 1 tonna acél + 2000 csempe y dollárért; stb.). Használhatja a set burkolatot, hogy megtalálja a legjobb módot az összes anyag beszerzésére, miközben minimalizálja a költségeket
forrás: http://math.mit.edu/~goemans/18434S06/setcover-tamara.pdf
a Set fedél NP-Hard:
erre a problémára nincs polinomiális időmegoldás, mivel a probléma ismert NP-Hard probléma. Van egy polinomiális idő mohó hozzávetőleges algoritmus, a mohó algoritmus logn hozzávetőleges algoritmust biztosít.
példa:
nézzük meg a fenti példát, hogy megértsük mohó algoritmus.
első iteráció:
I = {}
az új elemenkénti költség S1 = költség(S1)/|S1 – I| = 5/3
az új elemenkénti költség S2 = költség(S2)/|S2 – I| = 10/2
az új elemenkénti költség S3 = költség(S3)/|S3 – I| = 3/4
mivel az S3-nak van minimális értéke S3 hozzáadódik, i lesz {1,4,3,2}.
második iteráció:
i = {1,4,3,2}
az új elemenkénti költség S1 = költség(S1)/|S1 – I| = 5/0
vegye figyelembe, hogy S1 nem ad hozzá új elemet I.
az új elemenkénti költség S2 = költség(S2)/|S2 – I| = 10/1
vegye figyelembe, hogy S2 csak 5-öt ad hozzá I.
a mohó algoritmus biztosítja a fenti példa optimális megoldását, de nem biztos, hogy mindig optimális megoldást nyújt. Tekintsük a következő példát.
bizonyíték arra, hogy a fenti mohó algoritmus logn hozzávetőleges.
legyen OPT a költségek optimális megoldás. Mondjuk (k-1) elemeket lefedjük a fenti kapzsi algoritmus iterációja előtt. Az ára a k ‘ edik elem i, hogy nem fedezték, mielőtt a jelenlegi lépés mohó algoritmus, és ott van az OPT. Mivel kapzsi algoritmus felveszi a leginkább költséghatékony Si, per-elem-költség a kiválasztott készlet kisebbnek kell lennie, mint OPT osztva a többi elem. Ezért költsége k ‘ edik elem költsége mohó algoritmus = költségeinek összege n elem
Forrás: