NP (complexitate)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Diagrama Euler-Venn pentru clasele de complexitate P , NP, NP-complete și NP-hard

Clasa problemelor include toate acele probleme de luare a deciziilor care, pentru a găsi o soluție pe o mașină Turing nedeterministă, necesită un timp polinomial. Clasa NP își ia numele din abrevierea pentru Timp polinom nedeterminist .

Clasa poate fi definit într-un mod alternativ prin exploatarea mașinilor Turing nedeterministe . De fapt, veți primi acest lucru ca un set de cuvinte pe un alfabet , asa de este în clasă dacă și numai dacă există o mașină Turing nedeterministă de complexitate polinomială care, pentru fiecare intrare , are cel puțin un calcul care converge.

Pe scurt dacă există o mașină Turing nedeterministă care acceptă (deci converge pentru fiecare intrare ).

Luând o mașină Turing nedeterministă de complexitate polinomială, atunci va accepta un limbaj care va fi o problemă care aparține clasei . Prin urmare, o astfel de mașină Turing, pentru fiecare intrare va avea printre toate calculele posibile pe această intrare, unul care se oprește.

În schimb, dacă intrarea care este furnizat mașinii Turing care acceptă nu aparține limbii din urmă, atunci vor exista doar calcule infinite și mașina Turing evident diferă.

Are asta . Din această afirmație este clar în primul rând că toate problemele clasei P sunt, de asemenea, probleme ale clasei NP.

Următorul arată că clasa poate fi caracterizat ca acea clasă de probleme pentru care se poate verifica rapid dacă o posibilă soluție este într-adevăr așa.

Teorema proiecției

Este o limbă sau o problemă. Atunci vom avea asta dacă și numai dacă există o problemă elegant ( ) și un polinom astfel încât problema noastră poate fi exprimat ca:

{ , cu astfel încât T}

Practic teorema ne face să înțelegem că problema este în clasă dacă există o problemă a clasei (problemă acceptată de o mașinărie Turing deterministă, pe care o numim , într-un timp polinomial) astfel încât pentru fiecare Intrarea este acceptat de în timp polinomial, cu constrângerea că lungimea lui este delimitat polinomial de .

Această din urmă condiție privind lungimea este fundamental să ne asigurăm că verificarea dacă este o soluție eficientă are loc în timp polinomial.

De fapt nu este suficient ca. și că, prin urmare acceptați în timp polinomial. Deci, în esență, putem spune asta dacă și numai dacă pentru fiecare Sunt capabil să îi asociez o posibilă soluție pe care o pot verifica în timp polinomial.

Demonstrație

Se versetul teoremei) Să presupunem că avem un limbaj a clasei care este decisă de mașina determinantă de Turing și, în plus, să presupunem că condiția este adevărată văzută în teoremă. Atunci va trebui să construim mașina Turing nedeterministă (cine acceptă ) astfel încât pentru fiecare intrare parcurgeți următorii 3 pași:

  1. calculati
  2. Scrie nedeterministic (adică generează toate configurațiile) cu
  3. Calculați mașina pentru intrare

Prima observație care se poate face este că mașina nu este deterministă are complexitate polinomială, deoarece toți cei trei pași pe care trebuie să-i efectueze sunt astfel. Asa de .

De asemenea, observăm că dacă este adevărat și apoi calculul se oprește. Prin urmare, derivăm că dacă \în tine și , asa de Accept . Dar dacă (mașina Turing nedeterministă de complexitate polinomială) acceptă , înseamnă că .

Spre și numai dacă din teoremă) Practic este necesar să se arate că dacă , adică dacă este acceptat de o mașină nedeterministă de complexitate polinomială, apoi susține că , T și asta .

Pentru a face acest lucru, trebuie să construiesc limba în mod corespunzător. În acest scop presupunem că atât mașina nedeterministă care acceptă . După cum știm pentru orice mașină, indiferent dacă este deterministă sau nu, fiecare calcul poate fi reprezentat ca o succesiune de configurații succesive.

În special, pentru fiecare calcul convergent, vom avea că lista configurațiilor succesive este o listă finită. Fiecăreia dintre aceste secvențe de configurații le putem asocia un număr care în cazul nostru va fi binar.

Cu toate acestea, pentru o mașină Turing nedeterministă, deoarece posibilele calcule diferite pe care le realizez pot fi infinite, vor exista probleme. Pentru a remedia acest lucru, putem lua în considerare cuplurile:

{ Unde codifică un calcul de care se termină pe intrare }

care, după cum putem vedea, dau viață întregului limbaj . A acestui limbaj trebuie verificată calitatea de membru al clasei de probleme . Pentru a face acest lucru, va trebui să verificați acest lucru pentru intrare calculul se oprește cu adevărat.

Practic trebuie verificat că la primul pas vă aflați în stat cu intrarea scrisă pe casetă ; atunci este necesar să se verifice dacă fiecare configurație ulterioară derivă din cea anterioară prin intermediul funcției de tranziție ; în cele din urmă, trebuie verificat că ultima configurație este o configurație de tip terminal. Dacă toate acestea sunt adevărate atunci .

În acest moment trebuie arătat că există un polinom astfel încât . În acest scop observăm că dacă calculul pe din atunci acest calcul converge are un număr polinomial de pași și la fiecare pas am o configurație care are lungime polinomială față de lungimea ; În plus, de asemenea va avea lungime polinomială față de . Deci vom avea polinomul necesar.

Elemente conexe