Un problema NP-hard è un problema sì/no in cui trovare una soluzione per esso è difficile almeno quanto trovare una soluzione per il problema più difficile la cui soluzione può essere rapidamente verificata come se fosse vera. Alcuni problemi NP-hard sono quelli in cui una soluzione funzionante può essere verificata rapidamente (problemi NP) e altri no. I problemi NP-hard che sono anche problemi NP rientrano in una categoria chiamata NP-complete.

Un esempio di un problema che è difficile da risolvere almeno quanto qualsiasi altro problema per il quale possiamo verificare rapidamente le soluzioni, che è anche rapidamente verificabile (è sia NP-hard che NP):

Un commesso viaggiatore vuole visitare 100 città guidando, iniziando e terminando il suo viaggio a casa. Ha una scorta limitata di benzina, quindi può guidare solo per un totale di 10.000 chilometri. Vuole sapere se può visitare tutte le città senza rimanere senza benzina.

La gente non sa come risolvere questo problema più velocemente che testando ogni possibile risposta, ma se si trova una soluzione che permette al venditore di farlo, possiamo usare un algoritmo per verificare che sia vero. Questo problema è noto anche come problema del commesso viaggiatore.

Un esempio di un problema che è difficile da risolvere almeno quanto qualsiasi altro problema per il quale possiamo verificare rapidamente le soluzioni, ma che non può essere controllato rapidamente (è NP-duro, ma non è NP):

se qualcuno avvia un programma che semplicemente va,

mentre (true){ continua; }

e non si ferma mai, funzionerà per sempre?

Non esiste un modo noto per trovare una soluzione a tutti i problemi di questo tipo, e anche questo non può essere controllato.