În informatică, problema clicii este problema computațională a găsirii de clici (submulțimi de noduri, toate adiacente reciproc, numite și subgrafuri complete) într-un graf. Ea are mai multe formulări diferite, în funcție de care clici, și care informații despre acestea trebuie să fie găsite. Formulări comune ale problemei clicii sunt găsirea unei clici maxime (o clică cu cel mai mare număr posibil de noduri), găsirea unei clici cu pondere maximă într-un graf ponderat, listarea tuturor clicilor maxime (clici care nu pot fi extinse), și rezolvarea problemei deciziei pe testul dacă un graf conține o clică mai mare decât o anumită dimensiune.

Un algoritm cu forță brută găsește o 4-clică în acest graf cu 7 noduri (complementul grafului liniar de 7 noduri) verificând sistematic completitudinea tuturor C(7,4) = 35 subgrafuri de 4 noduri.

Problema clicii apare în următorul context din lumea reală. Se consideră o rețea socială, în care nodurile grafului reprezintă oamenii, iar muchiile grafului reprezintă cunoașterea reciprocă. Atunci, o clică reprezintă o submulțime de oameni care se cunosc unul pe celălalt, și algoritmii pentru găsirea clicilor pot fi utilizați pentru a descoperi aceste grupuri de prieteni comuni. Împreună cu aplicațiile sale în rețelele sociale, problema clicii are mai multe aplicații și în bioinformatică și chimie computațională.

Cele mai multe versiuni ale problemei clicii sunt grele. Problema deciziei la clici este NP-completă (una dintre cele 21 probleme NP-complete ale lui Karp). Problema găsirii clicii maxime este atât intractabilă parametric⁠(d) cât și greu de aproximat⁠(d). Și listarea tuturor clicilor maxime poate necesita timp exponențial întrucât există grafuri cu un număr exponențial de clici maximale. Prin urmare, o mare parte din teoria despre problema clicii este dedicată identificării tipurilor speciale de grafuri care admit mai mulți algoritmi eficienți, sau la stabilirea dificultății computaționale a problemei generale în diferite modele de calcul.

Pentru a găsi o clică maximă, se pot inspecta sistematic toate submulțimile, dar această căutare cu forța brută este prea consumatoare de timp pentru a fi practică în rețele care cuprind mai mult de câteva zeci de noduri. Deși nu se cunoaște niciun algoritm în timp polinomial pentru această problemă, se cunosc unii algoritmi mai eficienți decât căutarea cu forța brută. De exemplu, algoritmul Bron–Kerbosch poate fi folosit pentru a lista toate clicile maxime în timp optim, și este posibilă și listarea lor în timp polinomial pe clică.

Istorie și aplicații modificare

Studiul subgrafurilor complete în matematică precede terminologia de „clică”. De exemplu, subgrafurile complete au apărut pentru prima oară în literatura matematică în reformularea teoriei lui Ramsey în termeni de teoria grafurilor în Erdős & Szekeres (1935). Dar termenul de „clică” și problema listării algoritmice a clicilor provin amândouă din științele sociale, acolo unde subgrafurile completate sunt utilizate pentru a modela clicile sociale⁠(d), grupuri de oameni care se cunosc unul pe altul. Luce & Perry (1949) au utilizat grafurile pentru a modela rețelele sociale, și a adaptat terminologia științelor sociale pentru teoria grafurilor. Ei au fost primii care au denumit subgrafurile complete „clici”. Primul algoritm pentru rezolvarea problemelor clicii provine de la Harary & Ross (1957),[1] care au fost motivați de aplicabilitatea sociologică. Cercetătorii din științele sociale au definit, de asemenea, diverse alte tipuri de clici și clici maxime în rețelele sociale, „subgrupuri de coeziune” formate din persoane sau actori din rețea care împărtășesc unul dintre mai multe tipuri diferite de legături. Multe dintre aceste generalizări ale clicilor pot fi găsite construind un graf neorientat ale cărui margini reprezintă perechi legate de actori din rețeaua socială, și apoi aplicând un algoritm pentru problema clicii pe acest graf.[2]

După lucrările lui Harary și Ross, mulți alții au conceput algoritmi pentru diverse versiuni ale problemei clicii. În anii 1970, cercetătorii au început să studieze acești algoritmi din punct de vedere al analizei cazului cel mai rău⁠(d). A se vedea, de exemplu, Tarjan & Trojanowski (1977), o lucrare timpurie privind complexitatea în cel mai rău caz a problemei clicii maxime. De asemenea, în 1970, începând cu munca lui Cook (1971) si Karp (1972), cercetătorii au început să folosească teoria NP-completitudinii și a rezultatelor asociate de intractabilitate pentru a oferi o explicație matematică a dificultății percepute față a problemei clicii. În 1990, o serie de lucrări importante, începând cu Feige et al. (1991) , despre care s-a scris în New York Times,[3] au arătat că (presupunând că P ≠ NP) nici măcar nu este posibil să se aproximeze⁠(d) problema cu precizie și eficiență.

Algoritmii de găsire a clicii au fost utilizați în chimie, pentru a găsi substanțe chimice care se potrivesc cu o structură țintă[4] și pentru a modela dockingul molecular⁠(d) și punctele de legare ale reacțiilor chimice.[5] Aceștia pot fi folosiți și pentru a găsi structuri similare în diferite molecule.[6] În aceste aplicații, se formează un graf în care fiecare nod reprezintă o pereche de atomi, câte unul din fiecare din cele două molecule. Două noduri sunt conectate printr-o muchie dacă potrivirile pe care le reprezintă sunt compatibile una cu cealaltă. Compatibilitatea aceasta poate însemna, de exemplu, că distanțele dintre atomii din două molecule sunt aproximativ egale, cu o anumită toleranță. O clică în acest graf reprezintă o mulțime de perechi de atomi, în care toate perechile sunt compatibile cu celelalte.[7] Un caz special al acestei metode este utilizarea de produsului modular al grafurilor⁠(d) pentru a reduce problema găsirii cele subgrafului indus comun maximal⁠(d) a două grafuri la problema de găsirii unei clici maxime în produsul lor.[8]

În generarea automată de șabloane de test⁠(d), găsirea clicilor poate ajuta la legarea mărimii unui set de teste.[9] În bioinformatică, algoritmii de găsirea clicii au fost utilizați pentru a deduce arborii evolutivi,[10] pentru a prezice structurile proteice⁠(d),[11] și pentru găsirea grupurilor de proteine care interacționează strâns.[12] Listarea clicilor într-un graf de dependențe⁠(d) este un pas important în analiza anumitor procese aleatoare.[13] În matematică, conjectura lui Keller⁠(d) din mozaicarea față-în-față a hipercuburilor a fost infirmată de Lagarias & Shor (1992), care a folosit un algoritm de găsire a clicilor pe un graf asociat pentru a identifica un contraexemplu.[14]

Definiții modificare

 
Graful prezentat are o clică maximă, triunghiul {1,2,5}, și patru alte clici maximale, perechile {2,3}, {3,4}, {4,5}, și {4,6}.

Un graf neorientat este format dintr-o mulțime finită de noduri și o mulțime de perechi neordonate⁠(d) de noduri, numite muchii. Prin convenție, în analiza algoritmilor, numărul de noduri al unui graf se notează cu n , iar numărul de muchii se notează cu m. O clică în graful G este un subgraf complet al lui G. Adică, este o submulțime K de noduri astfel încât fiecare două noduri din K sunt cele două capete ale unei muchii din G. O clică maximală este o clică la care nu se mai pot adăuga noduri. Pentru fiecare nod v , care nu face parte dintr-o clică maximală, trebuie să existe un alt nod w , care este în clică și nu este adiacent lui v, ceea ce împiedică adăugarea lui v la clică. O clică maximă este o clică ce include cel mai mare număr posibil de noduri. Numărul de clică ω(G) este numărul de noduri dintr-o clică maximă din graful G.

S-au studiat mai multe probleme strâns legate de conceptul de clică.[15]

  • În problema clicii maxime, intrarea este un graf neorientat, iar rezultatul este o clică maximă din graf. Dacă există mai multe clici maxime, se poate alege arbitrar una dintre ele.
  • În problmea clicii maxime ponderate, la intrare este un graf neorientat cu ponderi pe nodurile sale (sau, mai puțin frecvent, pe muchii) și la ieșire se așteaptă o clică cu ponderea totală maximă. Problema clicii maxime este cazul special în care toate ponderile sunt egale.[16] Ca și problema de optimizării sumei ponderilor, au mai fost studiate și alte probleme de optimizare.[17]
  • În problema listării clicilor maximale, la intrare este un graf neorientat, iar rezultatul este o listă a tuturor clicilor maximale. Problema clicii maxime poate fi rezolvată folosind ca subrutină un algoritm pentru listarea clicilor maximale, deoarece clica maximă trebuie să fie inclusă între clicile maximale.[18]
  • În problema k-clicii, la intrare este un graf neorientat și un număr k. Rezultatul este o clică cu k noduri, dacă există una, sau, în caz contrar, o valoare specială care indică faptul că nu există nici o k-clică. În unele variante ale acestei probleme, rezultatul ar trebui să listeze toate clicile de dimensiune k.[19]
  • În problema deciziei clicii, la intrare este un graf neorientat și un număr k, iar rezultatul este o valoare logică: „adevărat” dacă graful conține o k-clică, și „fals” în caz contrar.[20]

Primele patru dintre aceste probleme sunt importante în aplicații practice. Problema deciziei clicii nu are importanță practică; este formulată în acest mod doar pentru a aplica teoria NP-completitudinii în problema găsirii clicii.[20]

Problema clicii și problema mulțimii independente⁠(d) sunt complementare: o clică în G este o mulțime independentă în graful complementar⁠(d) al lui G și vice-versa.[21] Prin urmare, multe rezultate computaționale pot fi aplicate la fel de bine oricărei probleme, și unele lucrări de cercetare nu fac distincție clară între cele două probleme. Cu toate acestea, cele două probleme au proprietăți diferite atunci când se aplică la familii limitate de grafuri. De exemplu, problema clicii poate fi rezolvată în timp polinomial pentru grafuri planare[22] în timp ce problema mulțimii independente este NP-dură pe grafuri planare.[23]

Algoritmi modificare

Găsirea unei singure clici maximale modificare

O clică maximală este o clică ce nu este inclusă într-o clică mai mare. Prin urmare, toate clicile sunt incluse într-o clică maximală.[24] Clicile maximale pot fi foarte mici. Un graf poate conține o clică nemaximală cu multe noduri și o clică separată de dimensiune 2, care este maximală. O clică maximă (adică cea mai mare) este neapărat și maximală, dar reciproca nu este valabilă. Există unele tipuri de grafuri în care toate clicile maximale sunt și maxime; acestea sunt complementarele⁠(d) unor grafuri bine acoperite⁠(d), în care toate mulțimile independente maximale sunt maxime.[25] Cu toate acestea, alte grafuri au clici maximale care nu sunt maxime.

O singură clică maximală poate fi găsită printr-un algoritm greedy simplu. Începând cu o clică trivială (de exemplu, orice nod individual, sau chiar mulțimea vidă), și se iterează, la fiecare pas adăugându-se la clică câte un nod din nodurile neincluse ale grafului. Pentru fiecare nod v, la fiecare iterație se verifică dacă este adiacent cu toate nodurile din clică și dacă nu este, este eliminat dintre cele potențiale. Acest algoritm rulează în timp liniar.[26] Din cauza ușurinței de a găsi clici maximale, și datorită dimensiunilor lor potențial mici, se acordă mai multă atenție problemei algoritmice mult mai dificile de a găsi o clică maximă sau, oricum, mare, decât se acordă problemei de a găsi o singură clică maximală. Cu toate acestea, unele cercetări în domeniul algoritmilor paraleli au studiat problema găsirii unei clici maxime. În special, problema de a găsi prima clică maximală în ordine lexicografică⁠(d) (cea găsită de către algoritmul de mai sus) a fost demonstrată a fi completă⁠(d) pentru clasa funcțiilor în timp polinomial. Acest rezultat sugerează că problema este puțin probabil să fie rezolvată în clasa de complexitate paralelă NC⁠(d).[27]

Clici de dimensiune fixă modificare

Se poate testa dacă un graf G conține o clică de k noduri, putându-se găsi astfel orice clică pe care ea o conține, folosind un algoritm cu forță brută⁠(d). Acest algoritm analizează fiecare subgraf cu k noduri și verifică dacă formează o clică. Este nevoie de timp O(nk k2), exprimat în notația big O. Aceasta pentru că există O(nk) subgrafuri de verificat, fiecare având O(k2) muchii a căror prezență în G trebuie să fie verificată. Astfel, problema poate fi rezolvată în timp polinomial ori de câte ori k este constant. Cu toate acestea, atunci când k nu are o valoare fixă, ci poate varia ca parte a datelor de intrare a problemei, timpul este exponențial.[28]

Cel mai simplu caz netrivial de problemă a găsirii clicii este de a găsi un triunghi într-un graf, sau, echivalent, de a determina dacă graful nu are triunghiuri⁠(d). Într-un graf cu m muchii, pot exista cel mult Θ(m3/2) triunghiuri (folosind notația big theta pentru a indica faptul că această limită este strictă). Cel mai rău caz pentru această formulă apare atunci când G este el însuși o clică (este graf complet). Prin urmare, algoritmii pentru listarea tuturor triunghiurilor durează cel puțin Ω(m3/2) în cel mai rău caz (folosind notația big omega), și se cunosc algoritmi care respectă această limitare de timp.[29] De exemplu, Chiba & Nishizeki (1985) descrie un algoritm care sortează nodurile în ordinea gradului, de la cel mai mare la cel mai mic și apoi iterează prin fiecare nod v din lista sortată, în căutarea unor triunghiuri care includ v și care nu includ niciun nod anterior din listă. Pentru a face astfel, algoritmul marchează toți vecinii lui v, caută prin toate muchiile incidente la un vecin al lui v, producând la ieșire un triunghi pentru fiecare muchie ce leagă două noduri marcate, și apoi elimină marcajele și șterge v din graf. După cum arată autorii, timpul pentru acest algoritm este proporțional cu arboricitatea⁠(d) grafului (notată cu a(G)), înmulțită cu numărul de muchii, adică O(m a(G)). Deoarece arboricitatea este de cel mult O(m1/2), acest algoritm rulează în timp O(m3/2). Mai general, toate clicile de k noduri pot fi listate de un algoritm similar care are nevoie de timp proporțional cu numărul de muchii înmulțit cu arboricitatea la puterea (k − 2). Pentru grafuri de arboricitate constantă, cum ar fi grafurile planare (sau, în general, grafurile din orice familie de grafuri minor-închisă⁠(d) netrivială), acest algoritm durează un timp O(m), care este optim deoarece este liniar în raport cu mărimea intrării.[19]

Dacă se dorește doar un singur triunghi, sau o asigurare că graful este fără triunghiuri, sunt posibili algoritmi și mai rapizi. După cum remarcă Itai & Rodeh (1978), graful conține un triunghi dacă și numai dacă matricea de adiacență și pătratul matricei de adiacență conțin intrări nenule în aceeași celulă. Prin urmare, tehnicile de înmulțire rapidă a matricelor, cum ar fi algoritmul Coppersmith–Winograd poate fi aplicat pentru a găsi triunghiuri în timp O(n2.376). Alon, Yuster & Zwick (1994) au utilizat înmulțirea rapidă a matricelor pentru a îmbunătăți algoritmul O(m3/2) pentru găsirea triunghiurilor până la O(m1.41). Acești algoritmi bazați pe înmulțirile rapide ale matricelor au fost extinse și la problemea găsirii de k-clici pentru valori mai mari ale lui k.[30]

Listarea tuturor clicilor maximale modificare

Conform unui rezultat din Moon & Moser (1965), fiecare graf de n noduriare cel mult 3n/3 clici maximale. Acestea pot fi enumerate de algoritmul Bron–Kerbosch, o metodă backtracking recursivă propusă în Bron & Kerbosch (1973). Principala subrutină recursivă a acestei proceduri are trei argumente: o clică parțială construită (nemaximală), o mulțime de noduri-candidat care ar putea fi adăugate la clică, și o altă mulțime de noduri, care nu ar trebui să fie adăugată (deoarece adăugarea lor ar conduce la o clică deja găsită). Algoritmul încearcă adăugarea nodurilor-candidat, unul câte unul la clica parțială, făcând un apel recursiv pentru fiecare. După încercarea fiecăruia dintre aceste noduri, ele sunt trecute în mulțimea de noduri care nu ar trebui să fie adăugate. Se poate demonstra că unele variante ale acestui algoritm au timp de rulare în cel mai rău caz O(3n/3), corespunzător numărului de clici care ar putea să trebuiască enumerate.[31] Prin urmare, aceasta oferă o soluție optimă în cel mai rău caz la problema listării tuturor clicilor maximale. Mai mult, algoritmul Bron–Kerbosch a fost testat în practică, și testele au relevat faptul că este mai rapid decât alternativele sale.[32]

Cu toate acestea, atunci când numărul de clici este semnificativ mai mic decât cel mai rău caz, sunt preferabili alți algoritmi. După cum se arată în Tsukiyama et al. (1977) se pot lista toate clicile maximale dintr-un graf într-un timp polinomial pentru fiecare clică generată. Un algoritm ca al acestora, în care timpul de execuție depinde de mărimea ieșirii, este cunoscut ca algoritm dependent de ieșire⁠(d). Algoritmul lor se bazează pe următoarele două observații, care dau o relație între clicile maximale ale unui graf G dat și clicile maximale ale grafului G \ v format prin eliminarea unui nod arbitrar v din G

:

  • Pentru fiecare clică maximală K a lui G \ v, ori K continuă să formeze o clică maximală în G, fie K ⋃ {v formează o clică maximală în G. Prin urmare, G are cel puțin la fel de multe clici maximale ca G \ v .
  • Fiecare clică maximală din G care nu conține v este o clică maximală în G \ v, și fiecare clică maximală din G care îl conține pe v poate fi formată dintr-o clică maximală K in G \ v prin adăugarea lui v și prin eliminarea nodurilor neadiacente cu v din K.

Folosind aceste observații, se pot genera toate clicile maximale ale lui G printr-un algoritm recursiv care alege un nod v arbitrar și apoi, pentru fiecare clică maximală K din G \ v, produce K și clica formată prin adăugarea lui v la K și eliminarea nodurilor neadiacente cu v. Cu toate acestea, unele clici ale lui G pot fi generate în acest fel pornind de la mai multe clici-părinte ale lui G \ v, deci trebuie eliminate duplicatele producând la ieșire o clică a lui G doar atunci când părintele său din G \ v este maximul lexicografic dintre toate clicile-părinte posibile. Pe baza acestui principiu, se arată că toate clicile maximale din G pot fi generat în timp O(mn) pe clică, unde m este numărul de muchii din G și n este numărul de noduri. Chiba & Nishizeki (1985) îmbunătățesc acest rezultat până la O(ma) pe clică, unde a este arboricitatea⁠(d) grafului dat. Makino & Uno (2004) oferă o alternativă de algoritm dependent de ieșire bazat pe înmulțirea rapidă a matricelor. Johnson & Yannakakis (1988) arată că este chiar posibilă listarea tuturor clicilor maxime în ordine lexicografică⁠(d) cu întârziere polinomială⁠(d) pe fiecare clică. Cu toate acestea, alegerea ordinii este importantă pentru eficiența acestui algoritm: pentru a inversa acestei ordini, nu există niciun algoritm cu întârziere polinomială decât dacă P = NP.

Pe baza acestui rezultat, este posibilă listarea tuturor clicilor maximale în timp polinomial, pentru familiile de grafuri în care numărul de clici este delimitat polinomial. Aceste familii includ grafuri cordale⁠(d), grafurile complete, grafurile fără triunghiuri⁠(d), grafurile de intervale⁠(d), grafurile de boxicitate⁠(d) limitată, și grafurile planare.[33] În particular, grafurile planare au O(n) clici, de dimensiune cel mult constantă, care pot fi enumerate într-un timp liniar. Același lucru este valabil pentru orice familie de grafuri, care este atât rară⁠(d) (are un număr de muchii cel mult liniar proporțional cu numărul de noduri) și închisă în raport cu operațiunea de găsire de subgrafuri.[19][34]

Găsirea clicilor maxime din grafuri arbitrare modificare

Se poate găsi o clică maximă, sau numărul de clică al unui graf cu n noduri în timp O(3n/3) = O(1.4422n) folosind unul dintre algoritmii descriși mai sus pentru a lista toate clicile maximale ale grafului, returnând-o apoi pe cea mai mare. Cu toate acestea, pentru această variantă de problemă a clicilor sunt posibile limite mai bune în cel mai rău caz. Algoritmul lui Tarjan & Trojanowski (1977) rezolvă această problemă în timp O(2n/3) = O(1.2599n). Este o schemă de backtracking recursiv similară cu cea din algoritmul Bron–Kerbosch, dar este capabilă să elimine unele apeluri recursive, atunci când se poate demonstra că clicile găsite în apel vor fi suboptime. Jian (1986) a îmbunătățit timpul la O(20.304n) = O(1.2346n), și Robson (1986) la O(20.276n) = O(1.2108n), în detrimentul unei complexități în spațiu mai ridicate. Algoritmul lui Robson combină un sistem backtracking similar (cu o analiză mai complexă a cazului) și o tehnică de programare dinamică⁠(d) în care soluția optimă este precalculate pentru toate subgrafurile mici conectate ale grafului complementar⁠(d). Aceste soluții parțiale sunt utilizate pentru a scurtcircuita recursivitatea backtracking. Cel mai rapid algoritm cunoscut astăzi este o versiune a acestei metode îmbunătățită de către Robson (2001) care rulează în timp O(20.249n) = O(1.1888n).[35]

Au existat și cercetări ample pe algoritmi euristici⁠(d) pentru rezolvarea problemelor clicii maxime fără garanții de execuție în cel mai rău caz, bazate pe metode, între care branch and bound⁠(d),[36] căutare locală⁠(d),[37] algoritmii greedy,[38] și programarea pe constrângeri⁠(d).[39] Printre metodologiile nestandard de calcul propuse pentru a găsi clici se numără calculul cu ADN[40] și calculul cuantic adiabatic⁠(d).[41] Problema clicii maxime a făcut subiectul unei provocări de implementare sponsorizată de DIMACS, în anii 1992-1993,[42] și o colecție de grafuri utilizate ca benchmark pentru provocare este disponibilă public.[43]

Clase speciale de grafuri modificare

 
În acest graf de permutări, clicile maxime corespund celei mai lungi secvențe descrescătoare (4,3,1) și (4,3,2) ale permutării care îl definește.

Grafurile planare, și alte familii de grafuri rare, au fost discutate mai sus: au un număr liniar de clici maximale, de dimensiuni limitate, care pot fi enumerate într-un timp liniar. În particular, pentru grafuri planare, orice clică poate avea cel mult patru noduri, conform teoremei lui Kuratowski⁠(d).

Grafurile perfecte⁠(d) sunt definite prin proprietățile lor că numărul de clică este egal numărul cromatic, și că această egalitate este valabilă și în fiecare subgraf indus. Pentru grafurile perfecte, este posibil să se găsească o clică maximă în timp polinomial, folosind un algoritm bazat pe programarea semidefinită⁠(d).[44] Cu toate acestea, această metodă este complexă și necombinatorie și algoritmii specializați de găsire a clicilor au fost dezvoltați pentru multe subclase de grafuri perfecte.[45] În grafurile complementare⁠(d) ale grafurilor bipartite, teorema lui König⁠(d) permite ca problema clicii maxime să fie rezolvată folosind tehnici de matching⁠(d). Într-o altă clasă de grafuri perfecte, grafurile de permutări⁠(d), o clică maximă este una dintre cele mai lungi secvențe descrescătoare⁠(d) ale permutării care definește graful și pot fi găsite folosind algoritmi cunoscuți pentru problema celei mai lungi secvențe descrescătoare. Invers, fiecare instanță de problemă a celei mai lungi secvențe descrescătoare a unei permutări poate fi descrisă echivalent, ca o problemă de a găsi o clică maximă în graful permutării.[46] Even, Pnueli & Lempel (1972) oferă o alternativă de algoritm în timp pătratic pentru clici maxime în grafuri de comparabilitate⁠(d), o clasă mai largă de grafuri perfecte care cuprind grafurile de permutări drept caz particular.[47] În grafurile cordale⁠(d), clicile maxime pot fi găsite prin listarea nodurilor într-o ordine de eliminare, și verificând vecinătățile⁠(d) de clică ale fiecărui nod în această ordine.[48]

În unele cazuri, acești algoritmi pot fi extinși și la alte clase neperfecte de grafuri. De exemplu, într-un graf circular⁠(d), vecinătatea fiecărui nod este un graf de permutare, deci o clică maximă într-un graf circular poate fi găsită prin aplicarea algoritmului pentru grafurile de permutări fiecărei vecinătăți.[49] În mod similar, într-o graf de discuri unitare (cu o reprezentare geometrică cunoscută), există un algoritm în timp polinomial pentru clica maximă bazat pe aplicarea algoritmului pentru complementele grafurilor bipartite la vecinătățile comune ale unor perechi de noduri.[50]

Problema algoritmică de a găsi o clică maximă într-un graf aleator⁠(d) extras din modelul Erdős–Rényi⁠(d) (în care fiecare muchie apare cu probabilitatea 1/2, independent de celelalte muchii) a fost sugerată de către Karp (1976). Deoarece clica maximă într-un graf aleator are, cu mare probabilitate, dimensiune logaritmică, el poate fi găsit printr-o căutare cu forță brută într-un timp așteptat să fie 2O(log2n).[51] Deși numărul de clică al unui astfel de graf este, de obicei, foarte aproape de a 2 log2n, algoritmi greedy simpli dar și tehnici de aproximare randomizate mai sofisticate găsesc numai clici de dimensiune log2n, de două ori mai mici. Numărul maxim de clici în astfel de grafice este cu mare probabilitate exponențial în raport cu log2n, ceea ce împiedică apariția de metode care listează toate clicile maxime și rulează în timp polinomial.[52] Din cauza dificultății acestei probleme, mai mulți autori au investigat problema clicii plantate⁠(d) problema, problema clicii pe grafuri aleatoare care au fost extinse prin adăugarea de clici mari.[53] Deși metodele spectrale⁠(d)[54] și programarea semidefinită⁠(d)[55] pot detecta clici ascunse de mărime Ω(√n), nu se cunosc algoritmi în timp polinomial care să le detecteze pe cele de mărime o(√n) (exprimat cu notația little o).[56]

Algoritmi de aproximare modificare

Mai mulți autori au considerat algoritmi de aproximare care încearcă să găsească o clică sau o mulțime independentă care, deși nu este maximă, are dimensiuni cât mai aproape de maxim, în timp polinomial. Deși o mare parte din această muncă s-a concentrat pe mulțimi independente în grafuri rare, un caz care nu are sens pentru problema complementară a clicii, s-a lucrat și la algoritmi de aproximare care nu folosesc astfel de prezumții de raritate.[57]

Feige (2004) descrie un algoritm în timp polinomial care găsește o clică de mărimea Ω((log n/log log n)2) în orice graf care are numărul de clică Ω(n/logkn) pentru orice constantă k. Folosind acest algoritm atunci când numărul de clică al unui graf dat de intrare este între n/log n

și n/log3n, trecând la un alt algoritm al lui Boppana & Halldórsson (1992) pentru grafuri cu numere de clică mai mari, și alegând o clică de două noduri dacă ambii algoritmi nu reușesc să gasească nimic, Feige⁠(d) oferă un algoritm de aproximare care găsește o clică cu un număr de noduri cu o aproximație de O(n(log log n)2/log3n) față de maxim. Deși raportul de aproximare⁠(d) al acestui algoritm este slab, este cel mai bun care se cunoaște până în prezent.[58] Rezultatele asupra dificultății de aproximare⁠(d) descris mai jos sugerează că nu poate exista niciun algoritm de aproximare cu un raport de aproximare semnificativ mai mic decât liniar.

Limite inferioare modificare

NP-completitudinea modificare

 
Instanță de 3-CNF satisfiabilitate (x ∨ x ∨ y) ∧ (~x ∨ ~y ∨ ~y) ∧ (~x ∨ y ∨ y) redusă la clică. Nodurile verzi formează o 3-clică și corespunde unei atribuiri satisfăcătoare.[59]

Problema deciziei pe clici este NP-completă. Acesta a fost una dintre cele 21 de probleme ale lui Richard Karp demonstrate a fi NP-complete în lucrarea sa „Reducibility Among Combinatorial Problems” din 1972.[60] Această problemă a fost menționată, și în articolul lui Stephen Cook prin care introducea teoria problemelor NP-complete.[61] Din cauza dificultății problemei deciziei, problema de a găsi o clică maximă este tot NP-hard. Dacă s-ar putea rezolva, s-ar putea rezolva și problema deciziei, prin compararea dimensiunii clicii maxime cu dimensiunea parametrului dat ca intrare în problema deciziei.

Demonstrația de NP-completitudine a lui Karp este o reducere many-one de la problema satisfiabilității booleene. Acesta descrie modul de a traduce formule booleene în formă normală conjunctivă⁠(d) (CNF) în instanțe echivalente de probleme a clicii maxime.[62] Satisfiabilitatea, la rândul său, a fost demonstrată a fi NP-completă în teorema Cook–Levin⁠(d). Dintr-o formulă CNF dată, Karp formează un graf care are un nod pentru fiecare pereche (v,c), unde v este o variabilă sau negația ei și c este o clauză din formulă ce conține v. Două dintre aceste noduri sunt conectate printr-o muchie dacă ele reprezintă atribuiri de variabile compatibile pentru diferite clauze. Adică există o muchie de la (v,c) la (u,d) ori de câte ori c ≠ d și u și v nu sunt niciuna negația celeilalte. Dacă k reprezintă numărul de clauze în formula CNF, atunci clicile cu k noduri din acest graf reprezintă moduri consistente de atribuire de valori de adevăr unor din variabilele sale, pentru a satisface formula. Prin urmare, formula poate fi satisfăcută dacă și numai dacă există o clică de k noduri.[60]

Unele probleme NP-complete (cum ar fi problema comis-voiajorului pe grafuri planare) se pot rezolva într-un timp exponențial într-o funcție subliniară față de dimensiunea de parametrului de intrare n, semnificativ mai rapid decât o căutare cu forța brută.[63] Cu toate acestea, este puțin probabil ca o astfel de limită subexponențială de timp să fie posibilă pentru problema clicii pe grafuri arbitrare, deoarece ar implica în mod similar limite subexponențiale pentru multe alte probleme NP-complete standard.[64]

Complexitatea circuitelor modificare

 
Un circuit monoton care să detecteze o clică de k noduri într-un graf de n noduri pentru k = 3 și {{{1}}}. Fiecare intrare a circuitului codifică prezența ori absența unei anume muchii (cu roșu) din the graf. Circuitul folosește o poartă „și” internă pentru a detecta fiecare potențială k-clică.

Dificultatea computațională a problemei clicii a făcut ca ea să fie folosită la demonstrarea mai multor limite inferioare în complexitatea circuitelor⁠(d). Existența unei clici de o anume dimensiune este o proprietate monotonă a grafului⁠(d), adică dacă există o clică într-un graf dat, ea va exista în orice supergraf. Deoarece această proprietate este monotonă, atunci trebuie să existe un circuit monoton, care folosește doar porți „și” și porți „sau”, care să rezolve problema deciziei clicii pentru o dimensiune dată a clicii. Se poate demonstra însă că mărimea acestor circuite este o funcție superpolinomială de numărul de noduri și mărimea clicii, exponențială față de rădăcina cubică a numărului de noduri.[65] Chiar și dacă s-ar permite un număr mic de porți „nu”⁠(d), complexitatea rămâne superpolinomială.[66] Mai mult, profunzimea unui circuit monoton pentru problema clicii cu porți al căror fan-in⁠(d) este limitat trebuie să fie cel puțin polinomială în raport cu mărimea clicii.[67]

Complexitatea arborilor de decizie modificare

 
Un arbore de decizie simplu pentru a detecta prezența unei 3-clici într-un graf cu 4 noduri. Folosește până la 6 întrebări de forma „Există muchia roșie?”, atingând limita optimă n(n − 1)/2.

Complexitatea arborelui de decizie⁠(d) (determinist) pentru stabilirea unui invariant de graf este numărul de întrebări de forma „există o muchie între nodul u și nodul v?”, căruia trebuie să i se găsească răspunsul în cel mai rău caz, pentru a determina dacă un graf are o anumită proprietate. Adică este adâncimea minimă a unui arbore de decizie boolean asociat problemei. Sunt n(n − 1)/2 întrebări ce pot fi puse. Prin urmare, orice invariant de graf poate fi determinat cu cel mult n(n − 1)/2 întrebări. Este de asemenea posibil să se definească complexitatea unor arbori aleatori și cuantici de decizie pentru un invariant, numărul așteptat de întrebări (pentru datele de intrare din cel mai rău caz) pe care trebuie să-l aibă răspunsul unui studiu aleator sau al unui algoritm cuantic pentru a determina corect dacă graficul dat are invariantul respectiv.[68]

Pentru că proprietatea de a conține o clică este monotonă, ea este acoperită de conjectura Aanderaa–Karp–Rosenberg⁠(d), care prevede că complexitatea unui arbore de decizie determinist a oricărei proprietăți monotone netriviale a grafului este exact n(n − 1)/2. Pentru invarianți arbitrari monotoni de graf, această ipoteză rămâne nedemonstrată. Cu toate acestea, pentru arbori de decizie determiniști, precum și pentru orice k în intervalul 2 ≤ kn, proprietatea de a conține o k-clică a fost demonstrată a avea complexitatea arborelui de decizie exact n(n − 1)/2 de către Bollobás (1976). Arborii de decizie determiniști necesită și o dimensiune exponențială pentru detectarea clicilor, sau dimensiuni polinomiale pentru a detecta clici de dimensiune mărginită.[69]

Conjectura Aanderaa–Karp–Rosenberg prevede și că complexitatea arborelui de decizie randomizat a funcțiilor monotone netriviale este Θ(n2). Conjectura rămâne din nou nedemonstrată, dar a fost rezolvată pentru proprietatea de a conține o k clică pentru 2 ≤ kn. Această proprietate este cunoscută a avea un arbore de decizie randomizat de complexitate Θ(n2).[70] Pentru arbori de decizie cuantici, cea mai cunoscută limită inferioară este Ω(n), dar nu se cunoaște niciun algoritm de potrivire pentru cazul k ≥ 3.[71]

Intractabilitatea cu parametru fix modificare

Complexitatea parametrizată⁠(d) este studierea în cadrul teoriei complexității a problemelor care sunt în mod natural echipate cu un mic parametru întreg k și pentru care problema devine mai dificilă dacă k crește, cum ar fi găsirea de k-clici în grafuri. O problemă este declarată a fi tractabilă cu parametru fix dacă există un algoritm pentru rezolvarea ei pe intrări de dimensiune n, și o funcție f, astfel că algoritmul se execută în timp f(knO(1). Adică este tractabilă cu parametru fix dacă poate fi rezolvată în timp polinomial pentru orice valoare fixă a lui k și mai mult decât atât, dacă exponentul polinomului nu depinde de k.[72]

Pentru a găsi clicile de k noduri, algoritmul de căutare cu forța brută are timp de rulare O(nkk2). Deoarece exponentul lui n depinde de k, acest algoritm nu este tractabil cu parametru fix. Deși aceasta poate fi îmbunătățit cu ajutorul înmulțirii rapide a matricelor, timpul de rulare are încă un exponent care este liniară în k. Astfel, deși timpul de rulare al unor algoritmi cunoscuți pentru problema clicii este polinomial pentru orice k fix, acești algoritmi nu sunt suficienți pentru tractabilitatea cu parametru fix. Downey & Fellows (1995) au definit o ierarhie a problemelor parametrizate, ierarhia W, despre care au emis ipoteza că nu are algoritmi tractabili cu parametru fix. Ei au demonstrat că mulțimea independentă (sau, echivalent, clica) este problemă dură pentru primul nivel al acestei ierarhii, W[1]. Astfel, conform acestei conjuncturi, clica nu are niciun algoritm tractabil cu parametru fix. Mai mult decât atât, acest rezultat oferă baza pentru demonstrația W[1]-durității multor alte probleme, și astfel servește ca un analog al teoremei Cook–Levin⁠(d) pentru complexitatea parametrizată.[73]

Chen et al. (2006) au arătat că găsirea de clici cu k noduri nu poate fi efectuată în timp no(k) cu excepția cazului în care nu este valabilă ipoteza timpului exponențial⁠(d). Din nou, aceasta oferă dovezi că nu este posibil niciun algoritm tractabil cu parametru fix.[74]

Deși problemele de listare a clicilor maximale sau găsirea unor clici maxime sunt puțin probabil să tractabile cu parametrul fix k, acestea pot fi tractabile cu alți parametri ficși. De exemplu, ambele probleme sunt cunoscute a fi tractabile cu parametru fix atunci când sunt parametrizate prin degenerarea⁠(d) grafului de la intrare.[34]

Greutatea de aproximare modificare

 
Un graf de relații de compatibilitate între eșantioane de 2 biți din șiruri de 3 biți. Fiecare clică maximală (triunghi) din acest graf reprezintă toate modalitățile de eșantionare a unui singur șir de 3 biți. Demonstrația neaproximabilității problemei clicii implică subgrafuri induse ale unor grafuri definite analog pentru un număr mai mare de biți.

Se cunosc demult rezultate slabe care sugerează problema clicii ar putea fi greu de aproximat. Garey & Johnson (1978) au observat că, din cauza faptului că numărul de clică are valori întregi mici și este NP-dur de calculat, acesta nu poate avea o schemă de aproximare în timp polinomial complet⁠(d). Dacă ar fi disponibilă o aproximare prea precisă, rotunjirea valorii acesteia la un număr întreg ar da exact numărul de clică. Cu toate acestea, nu se cunoșteau prea multe până la începutul anilor 1990, atunci când mai mulți autori au început să facă conexiuni între aproximarea clicilor maxime și demonstrațiile probabilistic verificabile⁠(d). Ei au folosit aceste conexiuni pentru a dovedi dificultatea de aproximare⁠(d) a rezultatelor pentru problema clicii maxime.[75] După mai multe îmbunătățiri ale acestor rezultate, se cunoaște că, pentru orice număr real ε > 0, nu poate exista un algoritm în timp polinomial care aproximează clica maximă cu un factor mai bun decât O(n1 − ε), decât dacă P = NP.[76]

Ideea acestor rezultate de neaproximabilitate este de a forma un graf care reprezintă un sistem de demonstrații probabilistic verificabile pentru o problemă NP-completă, cum ar fi problema satisfiabilității booleene. Într-un sistem de demonstrații veridicabile probabilistic, o demonstrație este reprezentată ca o succesiune de biți. Un exemplu de problemă a satisfiabilității ar trebui să aibă o demonstrație validă dacă și numai dacă este satisfiabilă. Demonstrația este verificată de către un algoritm care, după un timp polinomial de calcul pe datele de intrare ale problemei satisfiabilității, alege să examineze un număr mic de poziții alese aleatoriu din șirul demonstrației. În funcție de ce valori sunt găsite la proba de biți, verificatorul va accepta sau va respinge o demonstrație, fără să se mai uite la restul de biți. Falsele negative nu sunt permise: o demonstrație validă trebuie să fie întotdeauna acceptată. Cu toate acestea, acceptarea unei demonstrații invalide în mod eronat poate fi acceptată. Pentru fiecare demonstrație invalidă, probabilitatea ca verificatorul să o accepte trebuie să fie scăzută.

Pentru a transforma un sistem de demonstrații probabilistic verificabile într-o problemă a clicii, se formează un graf cu un nod pentru fiecare rulare posibil acceptabilă de către verificatorul de demonstrații. Adică un nod este definit ca fiind una dintre posibilele alegeri aleatorii din mulțimea de poziții de examinat, și de valorile biților pentru acele poziții care ar face ca verificatorul să accepte demonstrația. Două noduri sunt adiacente, în acest graf, dacă cele două rulări acceptate corespunzătoare văd aceleași valori de biți biți la fiecare poziție examinată de fiecare. Fiecare șir de demonstrație (validă sau invalidă) corespunde unei clici, mulțimea rulărilor acceptate care văd acel șir de demonstrare, și toate clicile maximale apar în acest fel. Una dintre aceste clici este mare, dacă și numai dacă ea corespunde unui șir de demonstrație acceptat de mulți verificatori. Dacă instanța originală de satisfiabilitate este satisfiabilă, aceasta va fi un șir de demonstrație valid, unul acceptabil de către toate rulările verificatorului, și acest șir va corespunde unei clici mari din graf. Cu toate acestea, în cazul în care originalul nu este satisfiabil, atunci toate șirurile de demonstrație sunt invalide, fiecare șir de demonstrație având doar un număr mic de rulări ale verificatorului care-l acceptă eronat, și toate clicile sunt mici. Prin urmare, dacă s-ar putea distinge în timp polinomial între grafurile care au clici mari și grafurile în care toate clicile sunt mici, sau dacă s-ar putea aproxima cu exactitate problema clicii, atunci aplicând această aproximare la grafurile generate de cazurile de satisfiabilitate ar permite distingerea cazurilor satisfiabile de cele nesatisfiabile. Cu toate acestea, acest lucru nu este posibil decât dacă P = NP.[77]

Note modificare

  1. ^ Bomze et al. (1999); Gutin (2004).
  2. ^ Wasserman & Faust (1994).
  3. ^ Kolata (1990).
  4. ^ Rhodes et al. (2003).
  5. ^ Kuhl, Crippen & Friesen (1983).
  6. ^ National Research Council Committee on Mathematical Challenges from Computational Chemistry (1995).
  7. ^ Muegge & Rarey (2001).
  8. ^ Barrow & Burstall (1976).
  9. ^ Hamzaoglu & Patel (1998).
  10. ^ Day & Sankoff (1986).
  11. ^ Samudrala & Moult (1998).
  12. ^ Spirin & Mirny (2003).
  13. ^ Frank & Strauss (1986).
  14. ^ Graful Keller utilizat de Lagarias & Shor (1992) are 1048576 de noduri și mărimea clicii 1024.
  15. ^ Valiente (2002); Pelillo (2009).
  16. ^ Pelillo (2009).
  17. ^ Sethuraman & Butenko (2015).
  18. ^ & Valiente (2002).
  19. ^ a b c Chiba & Nishizeki (1985).
  20. ^ a b Cormen et al. (2001).
  21. ^ Cormen et al. (2001), Exercise 34-1, p. 1018.
  22. ^ Papadimitriou & Yannakakis (1981); Chiba & Nishizeki (1985).
  23. ^ Garey, Johnson & Stockmeyer (1976).
  24. ^ See, e.g., Frank & Strauss (1986).
  25. ^ Plummer (1993).
  26. ^ Skiena (2009), p. 526.
  27. ^ Cook (1985).
  28. ^ E.g., see Downey & Fellows (1995).
  29. ^ Itai & Rodeh (1978) provide an algorithm with O(m3/2) running time that finds a triangle if one exists but does not list all triangles; Chiba & Nishizeki (1985) list all triangles in time O(m3/2).
  30. ^ Eisenbrand & Grandoni (2004); Kloks, Kratsch & Müller (2000); Nešetřil & Poljak (1985); Vassilevska & Williams (2009); Yuster (2006).
  31. ^ Tomita, Tanaka & Takahashi (2006).
  32. ^ Cazals & Karande (2008); Eppstein, Löffler & Strash (2013).
  33. ^ Rosgen & Stewart (2007).
  34. ^ a b Eppstein, Löffler & Strash (2013).
  35. ^ Robson (2001).
  36. ^ Balas & Yu (1986); Carraghan & Pardalos (1990); Pardalos & Rogers (1992); Östergård (2002); Fahle (2002); Tomita & Seki (2003); Tomita & Kameda (2007); Konc & Janežič (2007).
  37. ^ Battiti & Protasi (2001); Katayama, Hamamoto & Narihisa (2005).
  38. ^ Abello, Pardalos & Resende (1999); Grosso, Locatelli & Della Croce (2004).
  39. ^ Régin (2003).
  40. ^ Ouyang et al. (1997).
  41. ^ Childs et al. (2002).
  42. ^ Johnson & Trick (1996).
  43. ^ DIMACS challenge graphs for the clique problem Arhivat în , la Wayback Machine., accesat la 2009-12-17.
  44. ^ Grötschel, Lovász & Schrijver (1988).
  45. ^ Golumbic (1980).
  46. ^ Golumbic (1980), p. 159.
  47. ^ Even, Pnueli & Lempel (1972).
  48. ^ Blair & Peyton (1993), Lemma 4.5, p. 19.
  49. ^ Gavril (1973); Golumbic (1980), p. 247.
  50. ^ Clark, Colbourn & Johnson (1990).
  51. ^ Song (2015).
  52. ^ Jerrum (1992).
  53. ^ Arora & Barak (2009), Example 18.2, pp. 362–363.
  54. ^ Alon, Krivelevich & Sudakov (1998).
  55. ^ Feige & Krauthgamer (2000).
  56. ^ Meka, Potechin & Wigderson (2015).
  57. ^ Boppana & Halldórsson (1992); Feige (2004); Halldórsson (2000).
  58. ^ Liu et al. (2015): "In terms of the number of vertices in graphs, Feige shows the currently known best approximation ratio".
  59. ^ Adapted from Sipser (1996)
  60. ^ a b Karp (1972).
  61. ^ Cook (1971).
  62. ^ Cook (1971) furnizează în esență aceeași reducere, din 3-SAT⁠(d) în loc de satisfiabilitate, pentru a arăta că izomorfismul de subgraf⁠(d) este NP-complet.
  63. ^ Lipton & Tarjan (1980).
  64. ^ Impagliazzo, Paturi & Zane (2001).
  65. ^ Alon & Boppana (1987).
  66. ^ Amano & Maruoka (2005).
  67. ^ Goldmann & Håstad (1992) used communication complexity⁠(d) to prove this result.
  68. ^ See Arora & Barak (2009), Chapter 12, "Decision trees", pp. 259–269.
  69. ^ Wegener (1988).
  70. ^ For instance, this follows from Gröger (1992).
  71. ^ Childs & Eisenberg (2005); Magniez, Santha & Szegedy (2007).
  72. ^ Downey & Fellows (1999).
  73. ^ Downey & Fellows (1995).
  74. ^ Chen et al. (2006).
  75. ^ Kolata (1990); Feige et al. (1991); Arora & Safra (1998); Arora et al. (1998).
  76. ^ Håstad (1999) a arătat neaproximabilitatea pentru acest raport folosind o ipoteză de complexitate mai puternică, inegalitatea între NP și ZPP⁠(d).
  77. ^ Această reducere li se datorează lui Feige et al. (1991) și este utilizată în toate demonstrațiile ulterioare de neaproximabilitate; demonstrațiile diferă în puterea și în detaliile sistemului de demonstrații verificabile probabilistic pe care se bazează.

Bibliografie modificare

Tratate și manuale modificare

  • Arora, Sanjeev; Barak, Boaz (), Computational Complexity: A Modern Approach, Cambridge University Press, ISBN 978-0-521-42426-4 .
  • Blair, Jean R. S.; Peyton, Barry (), „An introduction to chordal graphs and clique trees”, Graph theory and sparse matrix computation, IMA Vol. Math. Appl., 56, Springer, New York, pp. 1–29, doi:10.1007/978-1-4613-8369-7_1, MR 1320296 .
  • Bomze, I. M.; Budinich, M.; Pardalos, P. M.; Pelillo, M. (), „The maximum clique problem”, Handbook of Combinatorial Optimization, 4, Kluwer Academic Publishers, pp. 1–74, CiteSeerX 10.1.1.48.4074  .
  • Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (), „34.5.1 The clique problem”, Introduction to Algorithms (ed. 2nd), MIT Press and McGraw-Hill, pp. 1003–1006, ISBN 0-262-03293-7 .
  • Downey, R. G.; Fellows, M. R. (), Parameterized complexity, Springer-Verlag, ISBN 0-387-94883-X .
  • Golumbic, M. C. (), Algorithmic Graph Theory and Perfect Graphs, Computer Science and Applied Mathematics, Academic Press, ISBN 0-444-51530-5 .
  • Grötschel, M.; Lovász, L.; Schrijver, A. (), „9.4 Coloring Perfect Graphs”, Geometric Algorithms and Combinatorial Optimization, Algorithms and Combinatorics, 2, Springer-Verlag, pp. 296–298, ISBN 0-387-13624-X .
  • Gutin, G. (), „5.3 Independent sets and cliques”, În Gross, J. L.; Yellen, J., Handbook of graph theory, Discrete Mathematics & Its Applications, CRC Press, pp. 389–402, ISBN 978-1-58488-090-5 .
  • Muegge, Ingo; Rarey, Matthias (), „Small molecule docking and scoring”, Reviews in Computational Chemistry, 17: 1–60, doi:10.1002/0471224413.ch1 .
  • National Research Council Committee on Mathematical Challenges from Computational Chemistry (), Mathematical Challenges from Theoretical/Computational Chemistry, National Academies Press, doi:10.17226/4886 .
  • Pelillo, Marcello (), „Heuristics for maximum clique and independent set”, Encyclopedia of Optimization, Springer, pp. 1508–1520, doi:10.1007/978-0-387-74759-0_264 .
  • Plummer, Michael D. (), „Well-covered graphs: a survey”, Quaestiones Mathematicae, 16 (3): 253–287, doi:10.1080/16073606.1993.9631737, MR 1254158, arhivat din original la , accesat în  .
  • Sipser, M. (), Introduction to the Theory of Computation, International Thompson Publishing, ISBN 0-534-94728-X .
  • Skiena, Steven S. (), The Algorithm Design Manual (ed. 2nd), Springer, ISBN 978-1-84800-070-4 .
  • Valiente, Gabriel (), „Chapter 6: Clique, Independent Set, and Vertex Cover”, Algorithms on Trees and Graphs, Springer, pp. 299–350, doi:10.1007/978-3-662-04921-1_6 .
  • Wasserman, Stanley; Faust, Katherine (), Social Network Analysis: Methods and Applications, Structural Analysis in the Social Sciences, 8, Cambridge University Press, p. 276, ISBN 978-0-521-38707-1 .

Presa populară modificare

Articole de cercetare modificare