W teorii złożoności obliczeniowej problem NP-trudny (NPH) to taki problem obliczeniowy, którego rozwiązanie jest co najmniej tak trudne jak rozwiązanie każdego problemu z klasy NP.
Formalna definicja problemu NP-trudnego jest następująca: problem
jest NP-trudny jeżeli pewien problem NP-zupełny
jest do niego redukowalny wielomianową transformacją Turinga.
Innymi słowy, problem NP-zupełny
można rozwiązać w wielomianowym czasie algorytmem rozwiązującym problem NP-trudny
, przez wykorzystanie hipotetycznej procedury
sprowadzającej problem NP-zupełny
do problemu NP-trudnego
, jeżeli tylko
daje się wykonać w wielomianowym czasie. NP-trudność można zdefiniować także w kategorii języków formalnych (a nie problemów). Do klasy problemów NP-trudnych mogą należeć problemy różnego typu: decyzyjne, przeszukiwania, optymalizacyjne.
Wraz z definicjami klas problemów NP i NP-zupełnych ma to następujące konsekwencje:
jest co najmniej tak trudny jak problem
;
jest problemem NP-zupełnym dlatego należy on do klasy problemów najtrudniejszych w NP, dlatego NP-trudny problem
jest co najmniej tak trudny jak cała klasa NP;
;
, to problemy NP-trudne nie mają rozwiązań w czasie wielomianowym, natomiast rozstrzygnięcie
nie przesądza o wielomianowej rozwiązywalności wszystkich problemów NP-trudnych;
należy do klasy NP, to
jest też problemem NP-zupełnym (gdyż wraz z istniejącą transformacją Turinga spełnia definicję problemu NP-zupełnego).