Problema acoperirii multimii este o intrebare clasica in informatica si teoria complexitatii . Această problemă generalizează problema acoperirii nodurilor NP-complete (și, prin urmare, este NP-hard). Deși problema acoperirii vârfurilor este similară cu aceasta, abordarea utilizată în algoritmul aproximativ nu funcționează aici. În schimb, vom lua în considerare un algoritm lacom. Soluția dată de el va fi mai rea decât cea optimă de un număr logaritmic de ori. Pe măsură ce dimensiunea problemei crește, calitatea soluției se deteriorează, dar totuși destul de lent, astfel încât această abordare poate fi considerată utilă.
Datele inițiale ale problemei de acoperire a mulțimii sunt o mulțime finită și o familie de submulțimi ale acesteia. O copertă este o familie cu cea mai mică cardinalitate, a cărei unire este . În cazul unei întrebări despre permisiunea de a intra, sunt date o pereche și un număr întreg ; întrebarea este existența unui set de acoperire a cardinalității (sau mai puțin).
Ca exemplu de problemă de acoperire a unui set, luați în considerare următoarea problemă: imaginați-vă că este necesar un anumit set de abilități pentru a finaliza o sarcină . Există, de asemenea, un grup de oameni care au fiecare dintre aceste abilități. Este necesar să se formeze cel mai mic subgrup suficient pentru a finaliza sarcina, adică. inclusiv purtători ai tuturor aptitudinilor necesare.
Algoritmul greedy selectează seturile după următoarea regulă: la fiecare etapă, se selectează un set care acoperă numărul maxim de elemente neacoperite încă.
Greedy-Set-Cover(U,F), unde este o mulțime dată de toate elementele, este o familie de submulțimi
Se poate demonstra că acest algoritm funcționează cu acuratețe , unde este puterea celei mai mari mulțimi și este suma primilor termeni ai seriei armonice.
Cu alte cuvinte, algoritmul găsește o acoperire a cărei dimensiune este de cel mult ori dimensiunea acoperirii minime.
Teorema lui Feige spune că pentru problema de acoperire a mulțimii nu există un algoritm cu un factor de aproximare , deoarece în caz contrar, clasa de complexitate NP ar fi egală cu clasa de complexitate TIME( ). [1] Astfel, algoritmul greedy este cel mai bun algoritm de aproximare pentru problema de acoperire a mulțimii.
Există un exemplu standard în care algoritmul greedy funcționează cu precizie .
Universul este format din elemente. Setul de mulțimi este format din mulțimi disjunse pe perechi , ale căror cardinalități sunt , respectiv. Există, de asemenea, două seturi disjunse , fiecare conţinând jumătate din elementele din fiecare . Pe un astfel de set, algoritmul greedy selectează seturile , în timp ce soluția optimă este alegerea seturilor și Un exemplu de date de intrare similare pentru poate fi văzut în figura din dreapta.
Algoritmul genetic este o metodă de căutare aleatorie euristică bazată pe principiul simulării evoluției unei populații biologice.
În cazul general, în timpul funcționării algoritmului, are loc o schimbare succesivă a populațiilor, fiecare dintre acestea fiind o familie de acoperiri, numite indivizi ai populației. Acoperirile populației inițiale sunt construite aleatoriu. Cea mai comună și mai bine dovedită este schema staționară a algoritmului genetic, în care următoarea populație diferă de cea anterioară doar prin unul sau doi indivizi noi. La construirea unui individ nou din populația actuală, ținând cont de ponderile acoperirilor, se selectează o pereche de indivizi „părinte” , iar pe baza acestora, în procedura de încrucișare (aleatoriu sau determinist), un anumit set de acoperire. se formează mulţimi . Apoi suferă o mutație , după care se construiește un individ din el, care înlocuiește acoperirea cu cea mai mare greutate în noua populație. Populația este actualizată de un anumit număr (specificat) de ori, iar rezultatul algoritmului este cea mai bună acoperire găsită.
Adesea , problema de acoperire a mulțimii este formulată ca o problemă de programare cu numere întregi [2] :
Este necesar să găsiți , unde este o matrice și = 1 dacă , și = 0 în caz contrar; denotă un vector de uni; ; este un vector, unde , dacă este inclus în acoperire, în caz contrar .
Soluția exactă poate fi obținută în timp polinomial dacă matricea este complet unimodulară . Aceasta include, de asemenea, problema acoperirii nodurilor pe un graf și un arbore bipartit . În special, atunci când fiecare coloană a matricei conține exact doi 1, problema poate fi privită ca o problemă de acoperire a marginilor graficului, care se reduce efectiv la găsirea unei potriviri maxime . Pe clasele de probleme în care sau sunt mărginite de o constantă, problema se rezolvă în timp polinomial prin metode de enumerare exhaustivă.
Probleme NP-complete | |
---|---|
Problema de maximizare a stivuirii (ambalării) |
|
teoria grafurilor teoria multimelor | |
Probleme algoritmice | |
Jocuri de logică și puzzle-uri | |