P pret NP ir centrāls jautājums datorzinātnē un matemātikā: vai katru problēmu, kuras risinājuma pareizību datorā var ātri pārbaudīt, var arī ātri atrisināt? Vienkāršāk sakot, vai P = NP? Šajā jautājumā P un NP apzīmē divas problēmu kopas pēc to sarežģītības.
Kas ir P un NP?
P (polinomiāls laiks) ir problēmu klase, kuras datori vai precīzāk — deterministisks algoritms — var atrisināt ātri, proti, laikā, kas aug polinomiāli atkarībā no ievades lieluma (piemēram, n, n^2, n^3). Šīs problēmas uzskatām par "vieglām" vai efektīvi atrisināmām.
NP (nondeterministic polynomial time) ir problēmu klase, kuras risinājuma pareizību datorā var ātri pārbaudīt. Tas nozīmē: ja kāds mums dod kandidāta risinājumu, tad deterministisks algoritms var pārbaudīt, vai tas ir pareizs, polinomiālā laikā. NP problēmas nav obligāti viegli atrisināmas, bet to risinājumu pareizību var ātri pārbaudīt. Šajā kontekstā terminu skaidrojumā tiek lietots arī simbols matemātika un formāla modelētājs, parasti Tjūringa mašīna.
NP-pilnība un piemēri
Iekš NP ir īpaša problēmu apakškopa — NP-pilnīgas problēmas. Tās ir visgrūtākās NP problēmas tādā nozīmē, ka, ja kādu NP-pilnīgu problēmu varētu atrisināt polinomiālā laikā (tātad tā būtu P), tad visi NP uzdevumi būtu atrisināmi polinomiālā laikā (t.i., P = NP). Daži labi zināmi piemēri:
- SAT (booleana apmierināmība) — vai loģiskas formulas variantiem eksistē uzdevums, kas padara formulu par patiesu;
- Ceļojumu pārdevēja problēma (Traveling Salesman Problem) — atrast īsāko ceļu, kas apmeklē visus pilsētu kopu vienreiz un atgriežas sākumpunktā;
- Grafu izgriešanas un krāsošanas problēmas, maks. kovera problēma u.c.
1971. gadā Stīvens Kuks savā rakstā "The complexity of theorem proving procedures" ("Teorēmu pierādīšanas procedūru sarežģītība") formalizēja NP-pilnības jēdzienu un parādīja, ka SAT ir NP-pilnīga. Drīz vien pēc tam ir bijuši daudzi redukciju pierādījumi, kas parāda, ka citas problēmas arī ir NP-pilnīgas.
Vēsture īsumā
Idejas saknes sniedzas atpakaļ — 1956. gadā Kurts Gēdelis uzrakstīja vēstuli Džonam fon Neimanam, kurā viņš jautāja, vai noteiktu NP-pilnīgu problēmu var atrisināt polinomiālā laikā (piemēram, lineāri vai kvadrātiski). Vēlāk, 1971. gadā, Stīvens Kuks formulēja P pret NP problēmu precīzāk; neatkarīgi līdzīgas idejas attīstīja arī citi pētnieki, piemēram, Leonid Levin un Ričards Kārps, kuri pētīja reducējamību starp problēmām.
Kāpēc P pret NP ir svarīgi?
- Teorētiska nozīme: tas ir pamata jautājums par to, ko skaitļošanas modeļi spēj efektīvi aprēķināt.
- Praktiska nozīme: ja P = NP, daudzas problēmas, kurām šobrīd nav efektīvu algoritmu (optimizācija, plānošana, kombinatorika), kļūtu viegli risināmas. Tas radītu milzīgas sekas zinātnē, inženierijā un ekonomikā.
- Kryptogrāfija: mūsdienu kriptogrāfijas drošība lielā mērā paļaujas uz to, ka daudzas problēmas (piem., lielu skaitļu faktorizācija, diskrētas logaritmu problēmas) nav atrisināmas ātri. Ja P = NP un pastāv praktiski izmantojami polinomiālie algoritmi, daudz esošo drošības shēmu būtu jāizstrādā no jauna.
Kas notiktu, ja P = NP vai P ≠ NP?
Ja P = NP:
- Būtu iespējams atrast polinomiālus algoritmus visām NP problēmām, tostarp daudzām NP-pilnīgām problēmām.
- Daudzas sarežģītas optimizācijas un kombinatoriskās uzdevumu klases kļūtu viegli risināmas, kas varētu novest gan pie milzīga progresa, gan arī pie drošības risku palielināšanās kriptogrāfijā.
Ja P ≠ NP (plaši uzskatītā iespēja starp pētniekiem):
- ir problēmas, kurām nav iespējams atrast efektīvu (polinomiālu) algoritmu, vienkārši tāpēc, ka to nav iespējams izdarīt matemātiski;
- pētniecība koncentrējas uz aproksimācijas algoritmiem, heuritiskām metodēm, speciālām ievades gadījumu optimizācijām un eksperimentāliem risinājumiem (piem., jaudīgi SAT risinātāji praksē bieži atrisina liela izmēra gadījumus).
Mūsdienu stāvoklis un pierādījumu grūtības
Līdz šim nav atrasts ne pārliecinošs pierādījums, ka P = NP, ne pārliecinošs pierādījums, ka P ≠ NP. Šī problēma ir viena no Tūkstošgades balvas problēmām, un par oficiālu pierādījumu jebkurā virzienā piešķir 1 000 000 ASV dolāru balvu. Pētījumi ir parādījuši vairākus šķēršļus vienkāršiem pierādījumiem — piemēram, rezultāti par relativizāciju un "dabisko pierādījumu" (natural proofs) barjerām — kas skaidro, kāpēc klasiskas metodes līdz šim neved pie gala izšķiršanas.
Kā tas ietekmē praksi?
Pat bez gala atbildes uz P pret NP jautājumu, pētnieki un praktiķi ir izstrādājuši spēcīgas metodes, lai risinātu reālas pasaules problēmas:
- Aproksimācijas algoritmi, kas sniedz tuvu optimālus risinājumus ātri;
- Heuristikas un metaheuristikas (piem., ģenētiskie algoritmi, mākslīgā putas uc);
- SPECIFISKI optimizēti rīki, piemēram, SAT risinātāji, integer programming solveri, kas daudzos reālos gadījumos darbojas ļoti labi;
- Kryptogrāfijas izstrāde, kas ņem vērā iespējamās nākotnes izmaiņas (piem., kvantu datoru attīstības ietekme).
Apkopojot: P pret NP ir fundamentāls un dziļš jautājums par efektīvu skaitļošanu. Tas saista teorētiskas problēmas ar praktiskām sekām daudzās jomās — no algoritmu izstrādes līdz kiberdrošībai — un joprojām paliek neizšķirts kopš 20. gadsimta vidus.