Chi ha fatto un corso di algoritmi si porta dietro quasi sempre la stessa lezione: i problemi NP-hard sono, in pratica, irrisolvibili. Si dimostra che (probabilmente) non esiste un algoritmo che li risolva in tempo polinomiale su ogni input possibile, e da lì il salto mentale a "quindi lascia perdere, è una battaglia persa" è breve. È un salto sbagliato, e costa caro: capita di vedere persone abbandonare un problema di ottimizzazione reale — uno scheduling, un instradamento, una configurazione — solo perché qualcuno ha detto "è NP-hard", senza aver mai provato a scriverci sopra un algoritmo.
La dimostrazione di NP-hardness parla del caso peggiore: garantisce che esiste, da qualche parte nello spazio di tutti gli input teoricamente possibili, almeno un'istanza che farà esplodere qualunque algoritmo esatto. Non dice nulla sugli input che incontri davvero nel tuo dominio applicativo, che quasi sempre hanno una struttura molto più gentile di un input costruito apposta per far saltare un teorema.