P ir NP — tai vienas iš fundamentalių klausimų, kuris domina su kompiuteriais ir matematika dirbančius žmones: ar kiekvienas uždavinys, kurio sprendimą kompiuteris gali greitai patikrinti, taip pat gali būti greitai ir rastas? Trumpiau: ar P = NP? Sąvokos P ir NP žymi du skirtingus uždavinių tipus. P (polinominio laiko klasė) — tai uždaviniai, kuriuos deterministinis kompiuteris gali išspręsti per polinominį laiką (dažnai sakoma „greitai“ arba „lengvai“). NP (nondeterministinė polinomo klasė) — tai uždaviniai, kurių sprendimą galima patikrinti per polinominį laiką (t. y. jei turime kandidatą, jo teisingumą galima greitai patikrinti), tačiau nėra aišku, ar juos galima ir išspręsti taip pat greitai.
Kas tiksliai reiškia P ir NP?
Techniniu požiūriu kalbame apie sprendžiamus klausimus (sprendžiamus "taip" arba "ne") — vadinamuosius decision problems. Uždavinys priklauso klasei P, jei egzistuoja deterministinis algoritmas, kuris bet kuriam įėjimui sprendimą pateikia per polinomą laiko funkciją (pvz., n^2, n^3 ir pan.). Uždavinys priklauso klasei NP, jei, kai atsakymas yra „taip“, egzistuoja įrodymas (certificate), kurį deterministinis algoritmas gali patikrinti per polinominį laiką.
Šiuos apibrėžimus formalizuoja Turingo mašinos: P atitinka deterministines Turingo mašinas su polinominio laiko apribojimu, o NP — nondeterministines Turingo mašinas su polinominio laiko apribojimu (arba ekvivalentinį patikrinimo-įrodymo požiūrį).
NP-kompleksiškumas ir kodėl tai svarbu
Viduje NP yra tokia poaibė, kurįs uždavinius, jei vienas jų galima išspręsti per polinominį laiką, tai reiškia, kad visi NP uždaviniai taip pat gali būti išspręsti per polinominį laiką. Tokie uždaviniai vadinami NP-kompleksiniais. Formalus žingsnis, rodantis, kad vienas uždavinys yra NP-kompleksinis, atliekamas parodymus per redukcijas: rodomas polinominio laiko transformavimo būdas bet kurio NP uždavinio paversti tuo konkrečiu uždaviniu.
Vienas žymiausių rezultatų šioje srityje yra Cook–Levin teorema, kurią 1971 m. pateikė Stephensas Cookas: jis parodė, kad loginės išraiškos tenkinamumo (SAT) uždavinys yra NP-kompleksinis. Po to Richardas Karpas 1972 m. identifikavo daug praktinių NP-kompleksinių uždavinių (pvz., klika, Hamiltono ciklas, spalvinimas).
Istorija trumpai
1956 m. Kurtas Gödelis parašė laišką Johnui von Neumannui, kuriame kėlė klausimą, ar kai kurie iš pažiūros sunkūs uždaviniai galėtų būti išsprendžiami „greitai“ (pavyzdžiui, per kvadratinį ar tiesinį laiką). Formalus P ir NP suformulavimas bei plačiai dėmesio sulaukęs Cooko straipsnis („The complexity of theorem-proving procedures“, 1971) padėjo sutvirtinti modernų požiūrį į problemą. Po to Karpas ir kiti tyrėjai parodė daugybę realių NP-kompleksinių pavyzdžių.
Praktinė reikšmė
Šio klausimo sprendimas turi didžiulę įtaką daugeliui sričių:
- Kryptografija: daugelis šifravimo schemų remiasi to, kad tam tikros užduotys (pvz., didelių skaičių faktorizavimas) yra sunkios. Jei P = NP, daug dabartinio viešo rakto kriptografijos gali tapti nesaugu.
- Optimizavimas: daug realių problemas (gamybos planavimas, maršruto parinkimas, resursų paskirstymas) galima suformuluoti kaip NP-ar NP-kompleksinius uždavinius. Jei atsirastų greitas bendras sprendimo metodas, tai leistų radikaliai pagerinti daugelį pramonės procesų.
- Matematika ir įrodymai: jei P = NP ir būtų polinominis metodas generuoti sprendimus, kai kurių teoremų paieška ir įrodymų radimas galėtų būti automatizuotas.
- Kompiuterinės mokslo teorija: problema skatina tyrimus apie algoritmus, redukcijas ir skaitmeninę sudėtingumo struktūrą.
Kas būtų, jei P = NP arba P ≠ NP?
Jei P = NP, tai reikštų, kad kiekvienam uždaviniui, kurio sprendimo teisingumą galima greitai patikrinti, egzistuoja ir greitas (polinomio laiko) sprendimo algoritmas. Tai turėtų milžiniškas praktines pasekmes — tiek teigiamas (efektyvūs metodai daugybei optimizavimo uždavinių), tiek neigiamas (dabar saugios kriptografinės sistemos taptų pažeidžiamos). Tačiau net ir P = NP atveju gauti naudingi algoritmai galėtų turėti labai aukštus polinominius laipsnius arba didelius koeficientus, todėl praktikoje ne visada būtų greiti.
Jei P ≠ NP, tai patvirtintų intuiciją, kad egzistuoja uždaviniai, kuriuos galima patikrinti greitai, bet neįmanoma jų greitai išspręsti. Dauguma ekspertų mano, kad P ≠ NP, tačiau tai nėra įrodyta.
Dabartinė būklė
P vs NP tebėra atvira problema. Ji yra įtraukta į septynis Clay Matematikos instituto Tūkstantmečio premijos uždavinius, ir už teisingą sprendimą numatyta 1 000 000 JAV dolerių premija — apie tai praneša Molio matematikos institutas ir už. Per pastaruosius dešimtmečius pasiekta daug pažangos suprantant problemos ypatybes, parodyti kliuviniai (pvz., relatyvizacija, „natural proofs“, algebraizacija), bet bendro sprendimo vis dar nėra.
Praktiniai požiūriai
Nors problema teoriškai atvira, praktikoje informatikai ir inžinieriai sprendžia NP-kompleksinius uždavinius naudodami heuristikas, apytikslius (approximation) algoritmus, metaheuristikas (pvz., genetinius algoritmus, simulated annealing), arba optimizavimo metodus, kurie veikia gerai specifiniuose įėjimuose. Taip pat kai kurie svarbūs uždaviniai (pvz., faktorizavimas) yra NP klasės nariai, bet jie nėra žinomi kaip NP-kompleksiniai ir dabar teikia pagrindą daugeliui kriptografinių sistemų.
Išvados
P vs NP yra fundamentali, teorinė ir praktiškai svarbi problema kompiuterių moksle ir matematikoje. Jos sprendimas pakeistų supratimą apie tai, ką galime efektyviai automatizuoti ir kas lieka intrinsiciškai sunkiu uždaviniu. Kol kas problema lieka neatsakyta, todėl ji ir toliau skatina intensyvius tyrimus bei diskusijas visame mokslo pasaulyje.