Az algoritmusok elméletében a P osztály (az angol polinomból ) olyan feladatok halmaza, amelyekre léteznek „gyors” megoldási algoritmusok (amelyek futási ideje polinomiálisan függ a bemeneti adatok méretétől). A P osztály az algoritmusok szélesebb összetettségi osztályaiba tartozik .
Az algoritmust egy determinisztikus Turing-gép azonosítja, amely a bemeneti szalagra adott bemeneti ábécé alapján számítja ki a kapott választ . Az algoritmus futási ideje egy rögzített x bemeneti szóra a Turing-gép munkaciklusainak száma a gép elejétől a megállításáig. Egy Turing-gép által kiszámított függvény összetettsége a bemeneti szó hosszától függ, és egyenlő a gép maximális futási idejével az összes rögzített hosszúságú bemeneti szón:
.Ha egy f függvényre létezik olyan M Turing-gép , amely valamilyen c számra és elég nagy n , akkor azt mondjuk, hogy a P osztályba tartozik, vagy időben polinomiális.
A Church-Turing tézis szerint bármilyen elképzelhető algoritmus megvalósítható Turing-gépen. Bármely programozási nyelvhez hasonló módon definiálhat egy P osztályt (a definícióban a Turing-gépet a programozási nyelv implementációjával helyettesítve). Ha annak a nyelvnek a fordítója , amelyen az algoritmus megvalósul, polinomiálisan lelassítja az algoritmus végrehajtását (azaz az algoritmus végrehajtási ideje egy Turing-gépen kisebb, mint a végrehajtási idejének valamilyen polinomja egy programnyelvben), akkor a P osztályok definíciói erre a nyelvre és a Turing-gépre megegyeznek. Az összeállítás nyelvi kódja egy kis polinomiális lassítással átalakítható Turing-géppé, és mivel az összes létező nyelv lehetővé teszi az összeállításig történő fordítást (ismét polinomiális lassítással), a P osztály definíciói a Turing-gépekre és bármely meglévő programozási nyelvre ugyanazok.
Néha a P osztály a függvények szűkebb osztályát jelenti, nevezetesen a predikátumok osztályát (függvények ). Ebben az esetben az L nyelv , amelyet ez a predikátum ismer fel, azoknak a szavaknak a halmaza, amelyeken az állítmány egyenlő 1-gyel. A P osztály nyelvei azok a nyelvek, amelyekhez az osztály predikátumai vannak. Nyilvánvaló, hogy ha a és nyelvek a P osztályba tartoznak, akkor egyesülésük, metszéspontjuk és kiegészítésük is a P osztályba tartozik.
A P osztály az egyik legszűkebb összetettségi osztály. A hozzá tartozó algoritmusok szintén az NP osztályba tartoznak , a BPP osztályba (mivel lehetővé teszik a polinomiális megvalósítást nulla hibával), a PSPACE osztályba (mivel a Turing-gépen a munkaterület mindig kisebb, mint az idő), a P/Poly osztály (ennek bizonyítására a koncepció a gép protokollját használja, amelyet polinom méretű Boole -sémává alakítanak át).
Több mint 30 éve megoldatlan maradt a P és NP osztályok egyenlőségének problémája . Ha egyenlőek, akkor az NP osztály bármely problémája gyorsan (polinomiális időben) megoldható. A tudományos közösség azonban hajlik erre a kérdésre a negatív válasz felé. Ezen túlmenően a szélesebb osztályokba, például a PSPACE-be való felvétel szigorúsága nem bizonyított, de a P és a PSPACE egyenlősége jelenleg nagyon kétségesnek tűnik.
P osztályú problémák például egész számok összeadása, szorzása, osztása, osztás maradékának felvétele, mátrixszorzás , gráfok összefüggéseinek megállapítása, n szám halmazának rendezése, Euler -ciklus keresése m éles gráfon, néhány keresése szó egy n hosszúságú szövegben, minimális költségfák felépítése, lineáris programozás és néhány más.
Sok olyan probléma van, amelyre nem találtak polinomiális algoritmust, de nem bizonyították, hogy nem létezik. Ennek megfelelően nem ismert, hogy az ilyen problémák a P osztályba tartoznak-e. Íme néhány közülük:
Mivel gyakran nagy bemeneti adatokon kell kiszámítani a függvények értékét, nagyon fontos feladat a polinomiális algoritmusok megtalálása a függvények kiszámításához. Úgy gondolják, hogy sokkal nehezebb kiszámítani azokat a függvényeket, amelyek nem tartoznak a P osztályba, mint azokat, amelyek tartoznak. A P osztályba tartozó algoritmusok többségének bonyolultsága nem haladja meg a bemeneti adatok méretének kis fokú polinomját. Például a szabványos mátrixszorzási algoritmus n3 szorzást igényel ( bár léteznek gyorsabb algoritmusok, mint például a Strassen -algoritmus ). A polinom mértéke ritkán nagy. Az egyik ilyen eset az indiai matematikusok által 2002 -ben javasolt Agrawal-Kayala-Saksena teszt , amely kideríti, hogy az n szám prím -e az O (log 6 n ) műveletekben.
Algoritmusok összetettségi osztályai | |
---|---|
Fénynek tekinthető | |
Állítólag nehéz | |
Nehéznek tartott |
|
NP-teljes problémák | |
---|---|
A halmozás (csomagolás) maximalizálási problémája |
|
gráfelmélet halmazelmélet | |
Algoritmikus problémák | |
Logikai játékok és rejtvények | |