Reducciones entre problemas
Traducir un problema a otro es la herramienta con la que se demuestra dificultad y, dada vuelta, la que permite resolver algo nuevo con un algoritmo que ya existe.
Para este tema conviene tener claro:P, NP y qué significa NP-completo
Una reducción es traducir: convertir las instancias de un problema en instancias de otro, de modo que la respuesta se conserve. Suena burocrático y es la técnica con la que se demuestra que algo es NP-completo y, al mismo tiempo, la forma más rentable de resolver un problema nuevo.
Qué es reducir, exactamente
Reducir a es dar una transformación en tiempo polinomial que lleva cada instancia de a una de con la misma respuesta. Se escribe y se lee: no es más difícil que .
La dirección es la parte que más se confunde. Si y es fácil, entonces es fácil. Contrapuesto: si es difícil, entonces es difícil. La flecha va del problema conocido al problema del que se quiere hablar.
Tenemos SAT, que se sabe NP-completo, y un problema X del que queremos hablar.
Antes de seguir, predecí
Los dos pasos de una prueba de NP-completitud
Para probar que un problema es NP-completo hacen falta dos pasos. Primero, verificar que está en NP: describir el certificado y cómo se chequea en tiempo polinomial. Ese paso se olvida seguido y sin él la demostración no cierra.
Segundo, elegir un problema NP-completo conocido y reducirlo a . No al revés: reducir a SAT no prueba nada sobre la dificultad de , sólo que no es peor que SAT.
De 3-SAT a conjunto independiente
Un ejemplo concreto: de 3-SAT a conjunto independiente. Por cada cláusula de tres literales se arma un triángulo de tres vértices, y se conectan entre sí todos los pares de vértices que representan un literal y su negación.
Existe un conjunto independiente de tamaño igual a la cantidad de cláusulas si y sólo si la fórmula es satisfacible: elegir un vértice por triángulo equivale a elegir qué literal hacer verdadero en cada cláusula, y las aristas entre opuestos impiden asignaciones contradictorias. La construcción es polinomial y la equivalencia se prueba en las dos direcciones.
Las tres obligaciones de toda reducción
Toda reducción tiene tres obligaciones. Que la transformación sea polinomial; que una respuesta afirmativa del original dé una afirmativa del traducido; y la vuelta, que una afirmativa del traducido implique una del original.
La tercera es donde fallan las demostraciones apuradas. Es fácil traducir hacia adelante y no darse cuenta de que el problema traducido admite soluciones que no corresponden a ninguna solución del original.
Dada vuelta, es una herramienta de ingeniería
Dada vuelta, la reducción es una herramienta de ingeniería. En vez de escribir un algoritmo para un problema nuevo, se lo traduce a uno con resolvedores maduros: SAT, programación lineal entera, flujo máximo.
Programar horarios, asignar turnos o verificar configuraciones se modelan como SAT y se resuelven con herramientas que llevan décadas de optimización. Escribir la traducción suele ser más rápido y más confiable que escribir el algoritmo propio, aunque el modelo tape parte de la estructura del problema.
El mismo mecanismo en computabilidad
La idea excede a NP. En computabilidad se usa el mismo mecanismo para probar que un problema es indecidible: reduciendo el problema de la parada a él. Si se pudiera resolver, se resolvería la parada, que ya se sabe imposible.
Cambia la clase de recursos y el problema base; la forma del argumento es idéntica.
La reducción como herramienta de todos los días
| Tu problema | Se reduce a | Qué ganás |
|---|---|---|
| Asignar personas a turnos | flujo de costo mínimo | solución exacta en tiempo polinomial |
| Ordenar tareas con dependencias | orden topológico | un algoritmo lineal y detección de ciclos |
| Elegir versiones de paquetes compatibles | SAT | un resolvedor que ya existe y es muy bueno |
| Agrupar registros que comparten campos | componentes conexas | union-find, casi lineal |
| Armar horarios sin superposición | coloreo de grafos | saber que es NP-difícil y elegir heurística |
La reducción se enseña como herramienta teórica —para probar que algo es difícil— y en el trabajo se usa al revés, para resolver: si tu problema se puede expresar como uno conocido, heredás todos sus algoritmos, sus bibliotecas y sus décadas de optimización.
Más a fondo · formalKarp, Cook, y por qué importa la diferencia
Hay dos nociones de reducción y conviene no mezclarlas.
Una reducción de Karp, o de muchos a uno, transforma una instancia de en una de y devuelve la respuesta tal cual. Es la que se usa para definir NP-completitud, y es más restrictiva: sólo se puede llamar una vez al resolvedor de y no se puede negar la respuesta.
Una reducción de Cook, o de Turing, permite usar el resolvedor de como subrutina las veces que haga falta y combinar los resultados. Es más flexible y es la que se usa en la práctica: casi todas las reducciones útiles en el trabajo son de Cook.
La diferencia importa en un punto fino: con reducciones de Cook, NP y co-NP se vuelven indistinguibles, y por eso la teoría usa las de Karp para poder hablar de esa distinción. Para resolver problemas, la de Cook es la que sirve; para clasificar, la de Karp.
Cierre
Una reducción traduce instancias conservando la respuesta. Para demostrar dificultad se reduce lo conocido-difícil al problema nuevo, nunca al revés, y se prueban las dos direcciones. Para resolver, se reduce lo nuevo a un problema con buenos resolvedores.
Autoevaluación
¿Lo entendiste?
Práctica