Teoria complexității computaționale

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , teoria complexității calculului este o ramură a teoriei calculabilității care studiază resursele minime necesare (în principal timpul de calcul și memoria ) pentru rezolvarea unei probleme. Complexitatea unui algoritm sau eficiența unui algoritm se referă, așadar, la resursele de calcul necesare. Problemele sunt clasificate în diferite clase de complexitate , pe baza eficienței celui mai cunoscut algoritm capabil să rezolve acea problemă specifică.

O distincție informală, dar de mare importanță, este aceea plasată între așa-numitele probleme ușoare , dintre care se cunosc algoritmi de soluție eficiente și cele dificile , dintre care singurii algoritmi cunoscuți nu sunt eficienți. De exemplu, majoritatea criptografiei moderne se bazează pe existența unor probleme considerate dificile; studiul unor astfel de probleme are o importanță enormă, deoarece, dacă se dovedește un algoritm eficient pentru o problemă considerată dificilă, sistemele criptografice bazate pe aceasta nu ar mai fi sigure.

Descriere

Măsurarea resurselor

Pictogramă lupă mgx2.svg Același subiect în detaliu: estimarea asimptotică .

Pentru a măsura eficiența unui algoritm într-un mod univoc, este necesar să se definească o valoare independentă de tehnologiile utilizate, altfel același algoritm ar putea avea o eficiență diferită în funcție de tehnologia pe care este executat. Din acest motiv, ne referim la un model de calcul generic: mașina Turing . Orice model de calcul ales (de exemplu, mașina RAM , dar putem vorbi și despre calculatoare reale), în scopul clasificării problemelor, se comportă ca mașina Turing. Teza Bisericii-Turing afirmă, de fapt, că clasa funcțiilor calculabile coincide cu cea a funcțiilor calculabile de către o mașină Turing.

În ceea ce privește măsurarea resursei de timp , dat o mașină Turing , se spune că operează la timp de sine este numărul maxim de pași necesari pentru ca mașina să producă rezultatul pe o intrare de lungime .

În ceea ce privește măsurarea resursei spațiale , dat o mașină Turing , se spune că operează în spațiu de sine este numărul maxim de celule vizitate în timpul unui calcul pe o intrare de lungime , pe lângă cele ocupate de intrare.

Pentru ca aceste afirmații să fie valabile, trebuie să fie o funcție a propriei sale complexități , adică trebuie să îndeplinească următoarele condiții:

  • trebuie să fie monoton în creștere;
  • trebuie să fie calculabil în timp și spațiu limitat de valoarea funcției în sine.

Deoarece acest tip de măsurare este foarte detaliat, de aceea este dificil de aplicat realității, sunt introduse aproximări care permit să funcționeze pe algoritmi mai abstracte. În special, se folosește notația ( Sau mare ). Oficial:

de sine astfel încât , ,

Functia dintr-un anume încolo crește la fel de mult ca funcția . De exemplu, deoarece putem găsi o pereche de constante care îndeplinesc condiția de mai sus. Prin urmare, se spune că un algoritm funcționează în timp dacă se termină într-un timp proporțional cu a primit o dimensiune de intrare .

Pentru a evalua performanța unui algoritm, care sunt doar parțial legate de clasificarea unei probleme, este util să distingem unele cazuri: luăm în considerare cazul optim , cel mai rău și cel mediu .

  • Cazul optim este cazul în care datele sunt cele mai bune date posibile pentru algoritm, adică cele care necesită o prelucrare mai mică pentru a fi procesate.
  • Cel mai rău caz este pentru datele care necesită numărul maxim de pași pentru algoritm.
  • Cazul mediu este cel mai util caz de analizat, deoarece oferă un indicator real al complexității algoritmului, dar tinde să fie și cel mai complex, deoarece este adesea dificil să se determine care sunt datele medii. Uneori, pentru a rezolva problema medie a cazului, este preferabil să executați multe simulări ale algoritmului și apoi, din timpii obținuți cu simulările, să extrageți o formulă care să aproximeze în mod adecvat tendința medie.

În acest context, prin urmare, sunt utile alte două măsuri, complementare cu notația O mare :

  • de sine astfel încât , pentru , . Acesta este nu crește mai lent decât ; această notație este utilă pentru evaluarea cazului optim al unui algoritm: dacă un algoritm este ("Omega de ") înseamnă că în cel mai bun caz necesită pașii de rezolvat.
  • de sine Și , acesta este crește la fel de repede ca . Dacă un algoritm este ("Theta de "), nu există variații semnificative ale performanței între cel mai bun caz și cel mai rău caz.

Clasele de complexitate

Pictogramă lupă mgx2.svg Același subiect în detaliu: Clasa de complexitate .

Pornind de la măsurarea resurselor de calcul, clasele de complexitate pot fi definite:

  • clasa este ansamblul problemelor admise de o mașină Turing care le rezolvă și funcționează în timp .
  • Clasa este ansamblul problemelor admise de o mașină Turing nedeterministă care le rezolvă și funcționează în timp .
  • Clasa este ansamblul problemelor admise de o mașină Turing care le rezolvă și care funcționează în spațiu .
  • Clasa este setul de probleme admise de o mașină Turing nedeterministă care le rezolvă și operează în spațiu .

Astfel putem defini următoarele clase de complexitate:

  • ; se știe că algoritmii care se termină în timp polinomial cu privire la dimensiunea datelor rezolvă problemele aparținând claselor enumerate până acum.
  • ; pentru aceste probleme sunt cunoscuți algoritmi care se termină într-un număr de pași polinomiali cu privire la dimensiunea datelor dacă un număr nedeterminat de mașini poate fi utilizat în paralel sau dacă se utilizează o mașină Turing nedeterministă (conform definiției). Alte formulări echivalente sunt să se afirme că algoritmul se termină în timp polinomial cu „algoritmul Gastone” (de fiecare dată când trebuie făcută o alegere, este întotdeauna ghicit modul corect), sau că verificarea unei soluții poate fi efectuată în timp polinomial . Acronimul NP înseamnă polinom nedeterminist ( polinom nedeterminist ) și nu pentru „non-polinom”, chiar dacă pentru mulți dintre ei cunoaștem doar algoritmi deterministici care iau timp exponențial în ceea ce privește . Un număr mare de probleme de interes pentru aplicații aparțin acestei clase.
  • ; pentru aceste probleme sunt cunoscuți doar algoritmi care se termină într-un număr exponențial de pași cu privire la dimensiunea datelor, indiferent de modelul de calcul.

Dintre aceste clase, sunt cunoscute următoarele relații de echivalență:

Alte relații sunt necunoscute.

Principala implicație practică a acestei clasificări este împărțirea în probleme pe care știm să le rezolvăm eficient și în probleme pe care nu le știm dacă pot fi rezolvate eficient. De fapt, calcularea cazului optim al unui algoritm nu este de obicei prea complicată; ceea ce este foarte dificil de determinat este dacă un anumit algoritm este cel mai bine posibil pentru o anumită problemă. Demonstrațiile de acest tip sunt foarte rare, cea mai cunoscută este, fără îndoială, cea referitoare la sortarea prin comparație.

Având în vedere această premisă, observăm că, dacă cunoaștem o anumită problemă , este în general o greșeală de spus pentru că nu este posibil să spunem, având în vedere și includerea non-strictă a în . Într-adevăr, chiar știind asta , nu se știe dacă sau daca , și aceasta este una dintre marile probleme încă deschise în informatica teoretică, atât de mult încât merită un loc în problemele pentru mileniu .

Probleme NP-complete

«Când problema Este egal cu ? "

Întrebarea a fost formulată în 1971 și soluția ar putea fi văzută după colț, totuși, după mai bine de patruzeci de ani de studii, întrebarea este încă deschisă și fiind considerată una dintre problemele mileniului , soluția sa ne-ar permite să câștigăm un milion de dolari SUA (vezi premiul Clay ). Singurii pași înainte care s-au făcut se referă la clasificarea problemelor. Calea care a fost urmată a fost de a observa că multe dintre problemele care se aflau în clasă a urmat aceeași structură: construcția soluției cu un algoritm nedeterminist și verificarea soluției construite cu un algoritm determinist. Prin urmare, ne-am întrebat dacă există un numitor comun în aceste probleme și chiar există: ne-am dat seama că există probleme astfel încât un algoritm care să rezolve una dintre aceste probleme să poată fi transformat într-un algoritm pentru a rezolva orice problemă NP. Aceste probleme au fost numite NP-hard ( NP-hard ). S-ar putea ca o problemă NP-hard să nu se potrivească , în sensul că verificarea soluției (sau echivalent „algoritmul lui Gastone”) ar putea necesita mai mult decât un timp polinomial.

Reducerea spațiului logaritmic

Pentru a demonstra acest tip de echivalență, ne întoarcem la teoria limbajelor și exploatăm conceptul de reducere . Oficial:

date două limbi Și , respectiv definit pe alfabete Și , o functie este o reducere de la limbă la limbă de sine .

În special, reducerea spațiului logaritmic (simbol ), care permite exploatarea proprietăților setului foarte utile:

  • tranzitivitate , formal ;
  • închiderea claselor de complexitate, formal , unde este este una dintre clasele de complexitate enumerate mai sus; cu alte cuvinte, orice limbaj se reduce la un element de , este, de asemenea, un element al lui C;
  • completitudinea elementelor aparținând claselor, adică este C-complet dacă , unde C este una dintre clasele de complexitate enumerate mai sus: cu alte cuvinte, este C-complet dacă fiecare element al se rezumă la el.

Reducerea „în spațiul logaritmic” este o reducere care, pe lângă proprietățile enumerate mai sus, are caracteristica de a putea fi calculată de o mașină Turing care funcționează în spațiul logaritmic și datorită acestui fapt este demonstrată tranzitivitatea sa.

NP-completitudine

Pictogramă lupă mgx2.svg Același subiect în detaliu: NP-Complete .

În lumina acestor definiții, se poate spune că o problemă este NP-hard totuși . Problemele NP-complete , pe de altă parte, sunt acele probleme care sunt și NP-dificile, deci astfel încât . Este de remarcat faptul că aproape toate problemele (cu excepția celor din evident) sunt, de asemenea, NP-complete; singura excepție cunoscută, deocamdată, este izomorfismul graficelor , pentru care nimeni nu a fost încă capabil să demonstreze nici completitudinea, nici posibila apartenență la clasa P. Până acum câțiva ani, și verificarea primalității (dată un număr , spuneți dacă este prim sau nu) a fost o problemă NP, dar nu NP-completă; totuși în 2002 a fost găsit un algoritm care a mutat problema la P.

Exemple de probleme NP-complete sunt problema vânzătorului călător și problema de satisfacție booleană .

Cu scopul de a dovedi egalitatea , am început să căutăm un algoritm polinomial pentru soluționarea oricăreia dintre problemele NP-complete: aceasta ar prăbuși automat întreaga clasă de probleme in clasa . Nimeni nu a reușit să găsească și nici nu a putut vreodată cineva să demonstreze asta printr-un contraexemplu, deși mulți experți suspectează că aceasta este relația dintre cele două clase.

Aproximabilitate

Rotirea sticlei și solvabilitatea K

Bibliografie

  • ( EN ) Peter Bürgisser, Michael Clausen, M. Amin Shokrollahi (1997): Teoria complexității algebrice , Springer, ISBN 3-540-60582-7
  • ( EN ) Mikhail J. Atallah ed. (1999): Algorithms and Theory of Computation Handbook , CRC Press, ISBN 0-8493-2649-4

Elemente conexe

Alte proiecte

linkuri externe

Controlul autorității Tezaur BNCF 2244 · LCCN (EN) sh85029473 · GND (DE) 4120591-1