¿Por qué es difícil programar NP?

Podemos reducir 3-Coloring (un problema NP-complete muy conocido) a la programación. Esto mostrará que la programación también está completa para NP (ya que sabemos que está en NP).

La reducción es así:
Supongamos que se nos da una gráfica [matemática] G (V, E) [/ matemática] donde los vértices son un conjunto de clases y una arista [matemática] (u, v) \ en E [/ matemática] representa un alumno [matemática ] s_ {uv} [/ math] que quiere tomar ambas clases. Ahora considere esto como una instancia de un problema de programación en el que estamos tratando de colocar cada clase en 3 franjas horarias diferentes (los tres colores) donde ningún estudiante tiene un mal horario (dos o más clases se superponen).

Et voila! Si tenemos una forma polinómica de resolver la programación, entonces tenemos una forma polinómica de resolver 3 colores. Por lo tanto, la programación es NP-completa.

Sabemos que SAT es Np-Complete según el teorema de Cook-Levin.

Por lo tanto, SAT es Np-Hard según la definición de Np-Complete y Np-Hard, ambos juntos en mente.

Entonces, ahora puede intentar probar que SAT <= SC (es decir, SC es al menos tan difícil como SAT o SAT es reducible a SC)

, donde SC es un problema de programación.

Esto se puede hacer demostrando que existe un programa de llamadas de tiempo polinómico que puede resolver SAT llamando a una subrutina de solución SC.

Una vez que pruebe la reducción anterior, puede llamar a SC como Np-Complete y, por lo tanto, Np-Hard.