En teoría de la complejidad computacional, la clase de complejidad NP-hard (o NP-complejo, o "NP-difícil") es el conjunto de los problemas de decisión que contiene los problemas "H" tales que todo problema "L" en NP puede ser transformado polinomialmente en "H".