In genere, algoritmi efficienti hanno un runtime polinomiale e uno spazio di soluzione esponenzialmente ampio. Ciò significa che il problema deve essere facile in due sensi: in primo luogo, il problema può essere risolto in un numero polinomiale di passaggi, e in secondo luogo, lo spazio della soluzione deve essere molto strutturato perché il tempo di esecuzione è solo pollogaritmico nel numero di possibili soluzioni.
Tuttavia, a volte queste due nozioni divergono e un problema è facile solo nel primo senso. Ad esempio, una tecnica comune negli algoritmi di approssimazione e nella complessità parametrizzata è (approssimativamente) per dimostrare che lo spazio della soluzione può effettivamente essere limitato a una dimensione molto più piccola della definizione ingenua e quindi utilizzare la forza bruta per trovare la risposta migliore in questo spazio limitato . Se possiamo a priori limitarci a, diciamo, n ^ 3 possibili risposte, ma dobbiamo ancora controllare ognuna, in un certo senso tali problemi sono ancora "difficili" in quanto non esiste un algoritmo migliore della forza bruta.
Al contrario, se abbiamo un problema con un numero doppiamente esponenziale di possibili risposte, ma possiamo risolverlo solo in tempo esponenziale, allora vorrei dire che un tale problema è "facile" ("strutturato" potrebbe essere un migliore parola) poiché il runtime è solo il registro della dimensione dello spazio della soluzione.
Qualcuno conosce documenti che considerano qualcosa come la durezza basata sul divario tra un algoritmo efficiente e la forza bruta o la durezza rispetto alla dimensione dello spazio della soluzione?