A számítási komplexitáselméletben az NP-keménység (nem-determinisztikus idő-polinomiális keménység) olyan problémák osztályának meghatározó tulajdonsága, amelyek informálisan "legalább olyan kemények, mint az NP legnehezebb problémái ". Az NP-nehéz probléma egyszerű példája a részhalmazösszeg probléma .
Formális definíció: Egy megoldhatósági probléma NP-nehéz, ha NP- ben bármelyik probléma polinomiális időben redukálható -ra . Egy ekvivalens feltétel megköveteli, hogy NP-ben minden probléma megoldható legyen polinomiális időben egy orákulum segítségével [1] [2] esetén . Következésképpen egy polinomiális idejű algoritmus bármely NP-nehéz probléma megoldására polinomiális idejű algoritmusokat ad az NP összes problémájára.
Úgy gondolják, hogy nem léteznek polinomiális idejű algoritmusok az NP-kemény problémákra, de ez nem bizonyított (lásd a P≠NP problémát ) [3] . Sőt, a P osztály , amelyben minden probléma polinomiális időben van megoldva, az NP osztályban [4] található .
Néhány NP-nehéz optimalizálási probléma polinomiálisan közelíthető valamilyen állandó (konstans) közelítési tényezőhöz (különösen az APX -ben ), vagy akár bármilyen közelítési tényezőhöz ( PTAS -ban vagy FPTAS -ban ).
Az NP-nehéz problémáknak nem kell az NP komplexitási osztály elemeinek lenniük. Mivel az NP osztály a számítási komplexitáselmélet kulcsosztálya , ez a következő osztályok alapja:
NP Számítási döntési problémák osztálya, amelyekre adott pozitív döntés polinomiális idejű megoldásként igazolható egy determinisztikus Turing-géppel (vagy megoldható egy nem determinisztikus Turing-géppel polinomiális időben). NP-kemény (NP-kemény) A problémák egy osztálya, amelyek nem kevésbé bonyolultak, mint az NP legnehezebb problémái. Az NP-nehéz problémáknak nem kell az NP elemeinek lenniük; valójában az ilyen problémák akár megoldhatatlanok is lehetnek. NP-teljes (NP-teljes) A megoldhatósági problémák egy osztálya, amely az NP legnehezebb problémáit tartalmazza. Minden NP-teljes problémának NP-ben kell lennie, és minden más NP-teljes problémára redukálnia kell. NP-intermedier (NP-intermedier) A P és NP közötti köztes megoldhatósági problémák osztálya teljes, feltételezve, hogy a P és az NP osztályok különböznek egymástól. (Ha P=NP, akkor nincsenek NP-köztesek, mivel minden NP-ből (és P-ből) származó probléma ebben az esetben NP-teljesekre redukálódik, amelyek viszont ebben az esetben NP-ben és ennek megfelelően P-ben rejlenek)Részhalmazösszeg probléma : Van-e egy adott egész halmaznak egy nem üres részhalmaza, amelynek összege nulla? Ez egy megoldhatósági probléma, és NP-teljes.
Az utazó eladó probléma egy olyan optimalizálási probléma, amely a legkisebb költséggel járó ciklikus útvonal megtalálását jelenti a súlyozott gráf összes csomópontján keresztül. Ez egy NP-nehéz probléma [5] .
A leállítási probléma olyan probléma, amely NP-nehéz, de nem NP-teljes. A feladat: „Adott egy program és annak bemenete, leáll a program?” Könnyen bebizonyítható, hogy a leállítási probléma NP-nehéz, de nem NP-teljes – a Boole -féle kielégítési probléma leállítási problémává redukálható, ha egy Turing-gép leírásává alakítjuk, amely minden lehetséges bemenetet kipróbál, és mikor talál olyat, amelyik kielégíti a képletet, leáll, különben végtelen hurokba lép. Ezenkívül a leállítási probléma nem szerepel NP-ben, mivel az NP-ben lévő összes probléma véges számú művelettel megoldható, és a megállítási probléma eldönthetetlen .
Vannak NP-nehéz problémák, amelyek nem NP-teljesek és nem is eldönthetetlenek . Például a valódi kvantifikált logikai formulák nyelve eldönthető polinomtérben , de nem determinisztikus polinomidőben (ha NP ≠ PSPACE igaz ) [6] .
Az NP-nehéz problémák leggyakrabban az alábbi területeken fordulnak elő: