Por lo general, los algoritmos eficientes tienen un tiempo de ejecución polinómico y un espacio de solución exponencialmente grande. Esto significa que el problema debe ser fácil en dos sentidos: primero, el problema puede resolverse en un número polinómico de pasos y, en segundo lugar, el espacio de la solución debe estar muy estructurado porque el tiempo de ejecución es solo poliligarítmico en el número de soluciones posibles.
Sin embargo, a veces estas dos nociones divergen, y un problema es fácil solo en el primer sentido. Por ejemplo, una técnica común en algoritmos de aproximación y complejidad parametrizada es (aproximadamente) demostrar que el espacio de la solución en realidad puede restringirse a un tamaño mucho más pequeño que la definición ingenua y luego usar la fuerza bruta para encontrar la mejor respuesta en este espacio restringido . Si podemos restringirnos a priori a, digamos, n ^ 3 respuestas posibles, pero aún necesitamos verificar cada una, entonces, en cierto sentido, estos problemas siguen siendo "difíciles" en el sentido de que no hay mejor algoritmo que la fuerza bruta.
Por el contrario, si tenemos un problema con un número doblemente exponencial de posibles respuestas, pero podemos resolverlo en solo tiempo exponencial, entonces me gustaría decir que tal problema es "fácil" ("estructurado" puede ser mejor palabra) ya que el tiempo de ejecución es solo un registro del tamaño del espacio de la solución.
¿Alguien sabe de algún documento que considere algo como la dureza basada en la brecha entre un algoritmo eficiente y la fuerza bruta o dureza en relación con el tamaño del espacio de la solución?