En règle générale, les algorithmes efficaces ont un runtime polynomial et un espace de solution exponentiellement grand. Cela signifie que le problème doit être facile dans deux sens: premièrement, le problème peut être résolu en un nombre polynomial d'étapes, et deuxièmement, l'espace de la solution doit être très structuré car le temps d'exécution n'est que polylogarithmique dans le nombre de solutions possibles.
Cependant, parfois ces deux notions divergent, et un problème n'est facile que dans le premier sens. Par exemple, une technique courante dans les algorithmes d'approximation et la complexité paramétrée consiste (grossièrement) à prouver que l'espace de solution peut en fait être restreint à une taille beaucoup plus petite que la définition naïve, puis à utiliser la force brute pour trouver la meilleure réponse dans cet espace restreint. . Si nous pouvons a priori nous limiter à, disons, n ^ 3 réponses possibles, mais nous devons toujours vérifier chacune d'elles, alors dans un certain sens, ces problèmes sont toujours "difficiles" en ce sens qu'il n'y a pas de meilleur algorithme que la force brute.
Inversement, si nous avons un problème avec un nombre doublement exponentiel de réponses possibles, mais que nous pouvons le résoudre en un temps exponentiel seulement, alors je voudrais dire qu'un tel problème est "facile" ("structuré" peut être un meilleur mot) car le runtime n'est que le journal de la taille de l'espace de la solution.
Quelqu'un connaît-il des articles qui envisagent quelque chose comme la dureté basée sur l'écart entre un algorithme efficace et la force brute ou la dureté par rapport à la taille de l'espace de la solution?