P versus NP az egyik alapvető kérdés a számítástudományban: Minden olyan feladat, amelynek egy adott megoldását egy számítógépekkel gyorsan ellenőrizni tudjuk, szintén gyorsan megoldható-e egy számítógéppel? Röviden: a P és az NP két fontos problémacsoportot jelöl. A P problémák azok, amelyeket egy meghatározott (determinista) algoritmus polinomiális időben — azaz viszonylag „gyorsan” — meg tud oldani, ezért ezeket tekintjük „könnyűnek”. Az NP problémák olyan feladatok, amelyekre egy adott javasolt megoldást (egy „bizonyítékot” vagy „tanút”) polinomiális idő alatt le tudunk ellenőrizni; ez azt jelenti, hogy a megoldás gyorsan volt ellenőrizhető, de maga a megtalálása nem feltétlenül egyszerű.

Formálisabb meghatározás

Formálisan a P és NP nyelvek osztályai a döntési problémák (igen/nem válaszok) esetén értelmezettek:

  • P: azon problémák, amelyeket egy determinisztikus Turing-gép polinomiális idő alatt eldönt (legfeljebb n^k idő egy konstans k-val, ahol n a bemenet hossza).
  • NP: azon problémák, amelyekre létezik egy polinomiális hosszúságú „tanú” (certificate), és egy determinisztikus Turing-gép polinomiális idő alatt ellenőrizni tudja, hogy a tanú valóban érvényes megoldás-e. Egyenértékű megfogalmazás: olyan problémák, amelyeket egy nem-determinisztikus Turing-gép polinomiális idő alatt meg tud „találni”.

Nyilvánvaló, hogy P ⊆ NP, mert ha egy problémát gyorsan meg tudunk oldani, akkor a „megoldást” természetesen gyorsan ellenőrizni is tudjuk. A kérdés az, hogy ez az inklúzió szigorú-e: P = NP?

Történet és kulcsfontosságú eredmények

Az ötlet korai nyomai közt találjuk, hogy 1956-ban Kurt Gödel levelet írt John von Neumann-nak, amelyben arról elmélkedett, hogy egy bizonyos NP-típusú probléma megoldható-e kvadratikus vagy lineáris időben. A modern formális megfogalmazást Stephen Cook adta meg 1971-ben a "The complexity of theorem proving procedures" című cikkében; ekkor definiálta és bizonyította az első NP-teljes problémát (a Boole-kifejezés kielégíthetőségének kérdését, SAT). Ezzel párhuzamosan Leonid Levin függetlenül, és később Richard Karp (1972) is fontos eredményeket adott, amelyek feltárják az NP-teljes problémák univerzális szerepét.

Mi az NP-teljesség (NP-completeness)?

NP-teljes egy olyan probléma, amely (1) maga is NP-ben van, és (2) minden más NP-beli problémára polinomiális időben visszavezethető (polynomial-time many-one reduction). Ez azt jelenti, hogy ha bármely NP-teljes problémára találunk egy polinomiális idő algoritmust, akkor minden NP-probléma polinomiális idő alatt megoldható volna — vagyis P = NP következne. A Cook–Levin tétel bizonyította, hogy a SAT NP-teljes; ezt követően sok más gyakorlati nehézségű probléma (pl. 3-SAT, CLIQUE, Hamilton-út, VERTEX COVER, SUBSET-SUM stb.) is NP-teljesnek bizonyult.

Miért fontos a P vs NP kérdés?

  • Elméleti jelentőség: a számítási nehézség alapjait érinti — megmutatja, mi az, ami hatékonyan (polinomiális időben) kiszámítható és mi nem.
  • Gyakorlati következmények: ha P = NP, akkor sok olyan feladat, amely ma exponenciális időbe kerül (például általános kombinatorikus optimalizálási vagy bizonyításkeresési problémák), hatékonyan megoldhatóvá válna. Ez radikálisan átalakítaná a kriptográfiát, az optimalizálást, a gépi tanulást, a programverifikációt és más területeket.
  • Kriptográfia: a modern titkosítási rendszerek (pl. RSA) a számítási nehézségekre épülnek. Ha P = NP és a megfelelő algoritmus hatékonyan konstruálható, sok jelenlegi kriptográfiai séma megszűnne biztonságosnak lenni.

Mi történne, ha bizonyítanánk?

  • Ha P = NP bizonyítást kapnánk (és gyakorlati, kis kitevőjű algoritmust találnánk), átíródna a számítástechnika: sok „nehéznek” tartott probléma hatékonyan oldhatóvá válna. Ez hatalmas pozitív hatással lenne az ipari optimalizálásra, tudományos kutatásra és automatizált bizonyításokra — ugyanakkor a titkosítási infrastruktúra tömeges átalakulásához vezetne.
  • Ha P ≠ NP bizonyítást kapnánk, megerősítené azt a sejtést, hogy bizonyos feladatok valóban inherensen nehézek: nem létezik polinomiális időű általános algoritmus rájuk. Ez megnyugtató lenne a kriptográfia számára, és segítene a kutatás fókuszálásában (pl. közelítő algoritmusok, heurisztikák, speciális esetre vonatkozó hatékony módszerek).

Gyakorlati megközelítések és kutatás

Bár az általános P vs NP kérdés megoldatlan, a kutatás számos irányt követ:

  • Speciális esetekre és korlátozott bemenetekre hatékony algoritmusok keresése.
  • Közelítő (approximation) algoritmusok és közelítő határok kialakítása optimalizációs problémákhoz.
  • Heurisztikák és metaheurisztikák (pl. genetikus algoritmusok, lokális keresések), amelyek sok gyakorlati példán jól működnek, bár nem adnak garantált polinomiális időt minden esetre.
  • Komplexitáselméleti eredmények, amelyek finomabb osztályokat vizsgálnak (pl. NP∩co-NP, #P, PSPACE), és feltárják a problémák közötti finom különbségeket.

Jelentős díjak és a probléma státusza

A probléma a modern matematikai és számítástechnikai gondolkodás egyik legfontosabb nyitott kérdése. A Clay Matematikai Intézet az ún. Millennium-problémák közé sorolta — az első helyes megoldás kitűnő anyagi elismerésben, 1 000 000 USD díjban részesülne. Napjainkig a kérdés megoldatlan maradt, és intenzív kutatás tárgya a világ számos egyetemén és kutatóintézetében.

Összefoglalás

A P vs NP kérdés egyszerűen megfogalmazható, de mély következményekkel bír: megmutatja, hogy ami könnyen igazolható, az vajon könnyen meg is található-e algoritmikusan. A probléma tisztázása alapvetően befolyásolná az elméleti számítástudományt és sok gyakorlati területet, különösen a biztonságos kommunikációt és az optimalizálást.