Complejidad - Problemas NP

Anuncio
Complejidad - Problemas NP-completos
Algoritmos y Estructuras de Datos III
Teorı́a de Complejidad
I
Un algoritmo eficiente es un algoritmo de complejidad
polinomial.
I
Un problema está bien resuelto si se conocen algoritmos
eficientes para resolverlo.
I
El objetivo es clasificar los problemas según su complejidad.
I
Se aplica a problemas de decisión, o sea problemas que
toman ciertos parámetros y tienen como respuesta SI o NO
(aunque sus implicancias pueden extenderse a problemas de
optimización).
La teorı́a de NP-completitud
I
Una instancia de un problema es una especificación de sus
parámetros. Un problema de decisión π tiene asociado un
conjunto Dπ de instancias y un subconjunto Yπ ⊆ Dπ de
instancias cuya respuesta es SI.
Ejemplo: TSP
Dado un grafo completo con peso en las aristas y un número k,
¿existe un circuito Hamiltoniano de longitud a lo sumo k?
1
1
2
1
1
1
k=2
1
1
1
2
1
1
1
2
1
1
4
k=6
1
k=4
Distintas versiones de un problema de optimización π
Dada una instancia I del problema π:
I
Versión de evaluación: Determinar el valor de una solución
óptima de π para I .
I
Versión de optimización: Encontrar una solución óptima del
problema π para I (de valor mı́nimo o máximo).
I
Versión de decisión: Dado un número k, ¿existe una solución
factible de π para I tal que c(S) ≤ k si el problema es de
minimización (o c(S) ≥ k si el problema es de
maximización)?
I
Versión de localización: Dado un número k, determinar una
solución factible de π para I tal que c(S) ≤ k.
Ejemplo: Problema del viajante de comercio
Dado un grafo G con longitudes asignadas a sus aristas:
I
Versión de evaluación: Determinar el valor de una solución
óptima, o sea la longitud de un circuito hamiltoniano de G de
longitud mı́nima.
I
Versión de optimización: Determinar un circuito
hamiltoniano de G de longitud mı́nima.
I
Versión de decisión: Dado un número k, ¿existe un circuito
hamiltoniano de G de longitud menor o igual a k?
I
Versión de localización: Dado un número k, determinar un
circuito hamiltoniano de G de longitud menor o igual a k.
Distintas versiones de un problema de optimización π
¿Qué relación hay en la dificultad de resolver las distintas versiones
de un mismo problema?
Si resolvemos el problema de decisión, podemos:
I
Resolver el problema de evaluación usando búsqueda binaria
sobre el parámetro k.
I
Resolver el problema de localización resolviendo el problema
de decisión para el parámetro k para una versión reducida de
la instancia.
I
Resolver el problema de optimización resolviendo el problema
de decisión para el valor óptimo para una versión reducida de
la instancia.
Problemas intratables
Definición: Un problema es intratable si no puede ser resuelto por
algún algoritmo eficiente.
Un problema puede ser intratable por distintos motivos:
I
El problema requiere una repuesta de longitud exponencial
(ejemplo: pedir todos los circuitos hamiltonianos de longitud a
lo sumo k).
I
El problema es indecidible (ejemplo: problema de la parada).
I
El problema es decidible pero no se conocen algoritmos
polinomiales que lo resuelvan (no se sabe si es intratable o
no).
Modelos de Computadoras
Modelos formales para expresar cualquier algoritmo:
I
Máquina de Turing (1937, Alan Turing)
I
Máquinas de Acceso Random - RAM (1974, Aho, Hopcroft y
Ullman).
Los dos modelos son polinomialmente equivalente. Es decir, se
puede simular uno a otro con un costo polinomial.
Máquina de Turing Determinı́stica
I
Consiste de un control finito, una cabeza lecto-escritora y una
cinta con el siguiente esquema.
Control
Cinta
I
I
I
. . .
Cabeza lecto-escritora
. . .
Σ finito, el alfabeto; Γ = Σ ∪ {∗};
Q finito, el conjunto de estados;
q0 ∈ Q, estado inicial; Qf ⊆ Q, estados finales (qsi y qno para
problemas de decisión)
Máquina de Turing Determinı́stica
I
Sobre la cinta tengo escrito el input que es un string de
sı́mbolos de Σ y el resto de las celdas tiene ∗ (blancos).
I
Definimos un programa S como un conjunto de quı́ntuplas
S ⊆ Q × Γ × Q × Γ × M, donde M = {+1, −1} son los
movimientos de la cabeza a derecha o izquierda.
I
Para todo par (qi , sj ), existe exactamente una quı́ntupla
que comienza con ese par (máquina determinı́stica).
Máquina de Turing Determinı́stica
I
Arranque
I
I
I
posicionado en el estado distinguido q0 , el estado inicial
lectora ubicada en el comienzo de la cinta
Terminación
I
I
cuando no se puede inferir nuevas acciones para seguir
si el estado final es de aceptación, entonces acepta el input,
caso contrario lo rechaza
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a b b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a b * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
¿Qué significa la quı́ntupla (qi , sh , qj , sk , +1)? Significa que si
estando en el estado qi la cabeza lee sh , entonces escribe sk , se
mueve a la derecha y pasa al estado qj .
Ej:
I
Σ = {a, b};
Γ = Σ ∪ {∗};
I
Q = {q0 , q1 , qsi , qno };
Qf = {qsi , qno }
I
S = (q0 , a, q0 , a, +1),
(q0 , b, q1 , a, −1),
(q0 , ∗, qsi , ∗, −1),
(q1 , a, q0 , a, −1),
(q1 , b, qno , a, −1),
(q1 , ∗, q0 , b, +1)
q
q
Control
q si
. . . * * * a b a a a a * * * * *
. . .
Máquina de Turing Determinı́stica
I
Una máquina M resuelve el problema π si para toda instancia
empieza, termina y contesta bien (o sea, termina en el estado
final correcto).
Máquina de Turing Determinı́stica
I
Una máquina M resuelve el problema π si para toda instancia
empieza, termina y contesta bien (o sea, termina en el estado
final correcto).
I
La complejidad de una DTM está dada por la cantidad de
movimientos de la cabeza, desde el estado inicial hasta
alcanzar un estado final, en función del tamaño de la entrada.
TM (n) = máx{m tq ∃x ∈ Dπ , |x| = n y M con input x tarda m}
Máquina de Turing Determinı́stica
I
Una máquina M resuelve el problema π si para toda instancia
empieza, termina y contesta bien (o sea, termina en el estado
final correcto).
I
La complejidad de una DTM está dada por la cantidad de
movimientos de la cabeza, desde el estado inicial hasta
alcanzar un estado final, en función del tamaño de la entrada.
TM (n) = máx{m tq ∃x ∈ Dπ , |x| = n y M con input x tarda m}
I
Existen otros modelos de computadoras determinı́sticas
(máquina de Turing con varias cintas, Random Access
Machines, etc.) pero puede probarse que son equivalentes en
términos de la polinomialidad de los problemas a la DTM.
Máquina de Turing Determinı́stica
Máquina de Turing Determinı́stica
La clase P
Un problema está en P si:
I
Existe una DTM de complejidad polinomial que lo resuelve.
P = {π tq ∃M DTM tq M resuelve π y TM (n) ∈ O(p(n))
para algún polinomio p}
Que es equivalente a:
I
Existe un algoritmo polinomial que lo resuelve.
Máquinas de Turing No Determinı́sticas (NDTM)
I
No se pide unicidad de la quı́ntupla que comienza con
cualquier par (qi , sj ).
I
En caso de que hubiera más de una quı́ntupla, la máquina se
replica continuando cada una por una rama distinta.
I
Decimos que una NDTM resuelve el problema π si para toda
instancia de Yπ existe una rama que llega a un estado final qsi
y para toda instancia en Dπ \ Yπ todas las ramas llegan a un
estado final qno .
Máquinas de Turing No Determinı́sticas
q0
q si
q no
q no q no
q no
q si
Máquinas de Turing No Determinı́sticas
I
Una NDTM es polinomial para π cuando existe una función
polinomial T (n) de manera que para toda instancia de Yπ de
tamaño n, alguna de las ramas termina en estado qsi en a lo
sumo T (n) pasos.
La clase NP
Un problema π ∈ NP si:
I
Existe una NDTM polinomial que resuelve π.
NP es “polinimial no-determinı́stico”
Equivalentemente:
I
Si dada una instancia de SI y evidencia de la misma, puede
ser verificada en tiempo polinomial. Esa evidencia a veces se
llama certificado, y tiene que tener tamaño polinomial en el
tamaño de la entrada.
La clase NP
Lema
Si π es un problema de decisión que pertence a la clase NP,
entonces π puede ser resuelto por un algoritmo determinı́stico en
tiempo exponencial respecto del tamaño de la entrada.
Las clases P y NP
I
Claramente, P ⊆ NP.
Las clases P y NP
I
Claramente, P ⊆ NP.
I
Conjetura: P 6= NP.
Todavı́a no se demostró que exista un problema en NP\P.
Mientras tanto, se estudian clases de complejidad “relativa”,
es decir, que establecen orden de dificultad entre problemas.
Ejemplos de problemas en NP
I
Suma de enteros.
I
Multipliación de enteros.
I
Árbol generador mı́nimo.
I
Clique máxima.
I
Camino mı́nimo entre un par de nodos.
I
Problema del viajante de comercio.
I
Conjunto independiente de cardinal máximo.
I
Problema de satisfabilidad (SAT): Dado un conjunto de
claúsulas C1 , . . . , Cm formadas por literales basados en las
variables booleanas X = {x1 , . . . , xn }, determinar si hay una
asignación de valores de verdad a las variables de X tal que la
expresión C1 ∧ C2 ∧ . . . ∧ Cm sea verdadera.
Transformaciones polinomiales
I
Reducción polinomial: Sean π y π 0 dos problemas de
decisión. Decimos que f : Dπ0 → Dπ es una reducción
polinomial de π 0 en π si f se computa en tiempo polinomial y
para todo d ∈ Dπ0 , d ∈ Yπ0 ⇔ f (d) ∈ Yπ . Notación: π 0 ≤p π.
I
Si π 00 ≤p π 0 y π 0 ≤p π entonces π 00 ≤p π, ya que la
composición de dos reducciones polinomiales es una reducción
polinomial.
La clase NP-completo
Un problema de decisión π es NP-completo si:
1. π ∈ NP
2. ∀π 0 ∈ NP, π 0 ≤p π
Si un problema π verifica la condición 2., π es NP-difı́cil (es al
menos tan “difı́cil” como todos los problemas de NP).
¿¿P 6= NP??
I
Si existe un problema en NP-c ∩ P, entonces P=NP.
¿¿P 6= NP??
I
Si existe un problema en NP-c ∩ P, entonces P=NP.
I
Si π ∈ NP-c ∩ P, existe un algoritmo polinomial que resuelve
π, por estar π en P. Por otro lado, como π es NP-completo,
para todo π 0 ∈ NP, π 0 ≤p π.
¿¿P 6= NP??
I
Si existe un problema en NP-c ∩ P, entonces P=NP.
I
I
Si π ∈ NP-c ∩ P, existe un algoritmo polinomial que resuelve
π, por estar π en P. Por otro lado, como π es NP-completo,
para todo π 0 ∈ NP, π 0 ≤p π.
Sea π 0 ∈ NP. Aplicando la reducción polinomial que
transforma instancias de π 0 en instancias de π y luego el
algoritmo polinomial que resuelve π, por definición de
reducción polinomial, se obtiene es un algoritmo polinomial
que resuelve π 0 .
¿¿P 6= NP??
I
Si existe un problema en NP-c ∩ P, entonces P=NP.
I
I
I
Si π ∈ NP-c ∩ P, existe un algoritmo polinomial que resuelve
π, por estar π en P. Por otro lado, como π es NP-completo,
para todo π 0 ∈ NP, π 0 ≤p π.
Sea π 0 ∈ NP. Aplicando la reducción polinomial que
transforma instancias de π 0 en instancias de π y luego el
algoritmo polinomial que resuelve π, por definición de
reducción polinomial, se obtiene es un algoritmo polinomial
que resuelve π 0 .
Hasta el momento no se conoce ningún problema en NP-c∩P.
¿¿P 6= NP??
I
Si existe un problema en NP-c ∩ P, entonces P=NP.
I
I
Si π ∈ NP-c ∩ P, existe un algoritmo polinomial que resuelve
π, por estar π en P. Por otro lado, como π es NP-completo,
para todo π 0 ∈ NP, π 0 ≤p π.
Sea π 0 ∈ NP. Aplicando la reducción polinomial que
transforma instancias de π 0 en instancias de π y luego el
algoritmo polinomial que resuelve π, por definición de
reducción polinomial, se obtiene es un algoritmo polinomial
que resuelve π 0 .
I
Hasta el momento no se conoce ningún problema en NP-c∩P.
I
Tampoco se ha demostrado que un problema esté en NP\P.
En ese caso se probarı́a que P 6= NP.
¿Cómo se prueba que un problema es NP-completo?
El problema SAT consiste en decidir si, dada una fórmula lógica ϕ
expresada como conjunción de disyunciones (ej:
ϕ = x1 ∧ (x2 ∨ ¬x1 ) ∧ (x3 ∨ ¬x4 ∨ x1 )), existe una valuación de sus
variables que haga verdadera ϕ.
Teorema de Cook (1971): SAT es NP-completo.
La demostración de Cook es directa: considera un problema
genérico π ∈ NP y una instancia genérica d ∈ Dπ . A partir de la
hipotética NDTM que resuelve π, genera en tiempo polinomial una
fórmula lógica ϕπ,d en forma normal (conjunción de disyunciones)
tal que d ∈ Yπ si y sólo si ϕπ,d es satisfactible.
¿Cómo se prueba que un problema es NP-completo?
A partir del Teorema de Cook, la técnica standard para probar que
un problema π es NP-completo aprovecha la transitividad de ≤p , y
consiste en lo siguiente:
1. Mostrar que π está en NP.
2. Elegir un problema π 0 apropiado que se sepa que es NP-difı́cil.
3. Construir una reducción polinomial de π 0 en π.
¿Cómo se prueba que un problema es NP-completo?
A partir del Teorema de Cook, la técnica standard para probar que
un problema π es NP-completo aprovecha la transitividad de ≤p , y
consiste en lo siguiente:
1. Mostrar que π está en NP.
2. Elegir un problema π 0 apropiado que se sepa que es NP-difı́cil.
3. Construir una reducción polinomial de π 0 en π.
La segunda condición en la definición de problema NP-completo
sale usando la transitividad: sea π 00 un problema cualquiera de NP.
Como π 0 es NP-completo, π 00 ≤p π 0 . Como probamos que π 0 ≤p π,
resulta π 00 ≤p π.
Reducción de SAT a 3-SAT
El problema 3-SAT es una variante del problema SAT, en el cual
cada cláusula tiene exactamente tres literales. Como es una
restricción del dominio de SAT, está en NP, y en principio es “no
más difı́cil” que SAT.
Reducción de SAT a 3-SAT
El problema 3-SAT es una variante del problema SAT, en el cual
cada cláusula tiene exactamente tres literales. Como es una
restricción del dominio de SAT, está en NP, y en principio es “no
más difı́cil” que SAT.
Para probar que 3-SAT es NP-completo, vamos entonces a reducir
SAT a 3-SAT.
Reducción de SAT a 3-SAT
El problema 3-SAT es una variante del problema SAT, en el cual
cada cláusula tiene exactamente tres literales. Como es una
restricción del dominio de SAT, está en NP, y en principio es “no
más difı́cil” que SAT.
Para probar que 3-SAT es NP-completo, vamos entonces a reducir
SAT a 3-SAT.
Tomemos una instancia genérica de SAT ϕ = C1 ∧ · · · ∧ Cm .
Vamos a reemplazar cada Ci por una conjunción de disyunciones
ϕ0i , donde cada disyunción tenga tres literales, y de manera que ϕ
sea satisfactible si y sólo si ϕ01 ∧ · · · ∧ ϕ0m lo es.
Reducción de SAT a 3-SAT
I
Si Ci tiene tres literales:
ϕ0i = Ci .
Reducción de SAT a 3-SAT
I
Si Ci tiene tres literales:
ϕ0i = Ci .
I
Ci tiene dos literales, x1 y x2 , agregamos una variable nueva y
y definimos:
Ci = (x1 ∨ x2 ) → ϕ0i = (x1 ∨ x2 ∨ y ) ∧ (x1 ∨ x2 ∨ ¬y ).
Reducción de SAT a 3-SAT
I
Si Ci tiene tres literales:
ϕ0i = Ci .
I
Ci tiene dos literales, x1 y x2 , agregamos una variable nueva y
y definimos:
Ci = (x1 ∨ x2 ) → ϕ0i = (x1 ∨ x2 ∨ y ) ∧ (x1 ∨ x2 ∨ ¬y ).
I
Si Ci tiene k ≥ 4 literales, agregamos k − 3 variables nuevas:
Ci = (x1 ∨ x2 ∨ . . . ∨ xr ∨ . . . ∨ xk−1 ∨ xk ) →
ϕ0i = (x1 ∨x2 ∨y1 )∧. . .∧(¬yr −2 ∨xr ∨yr −1 )∧. . .∧(¬yk−3 ∨xk−1 ∨xk )
Reducción de SAT a 3-SAT
I
Si Ci tiene tres literales:
ϕ0i = Ci .
I
Ci tiene dos literales, x1 y x2 , agregamos una variable nueva y
y definimos:
Ci = (x1 ∨ x2 ) → ϕ0i = (x1 ∨ x2 ∨ y ) ∧ (x1 ∨ x2 ∨ ¬y ).
I
Si Ci tiene k ≥ 4 literales, agregamos k − 3 variables nuevas:
Ci = (x1 ∨ x2 ∨ . . . ∨ xr ∨ . . . ∨ xk−1 ∨ xk ) →
ϕ0i = (x1 ∨x2 ∨y1 )∧. . .∧(¬yr −2 ∨xr ∨yr −1 )∧. . .∧(¬yk−3 ∨xk−1 ∨xk )
Ej: Ci = (x1 ∨x2 ∨x3 ∨x4 ∨x5 ) → ϕ0i = (x1 ∨x2 ∨y1 )∧(¬y1 ∨x3 ∨y2 )∧(¬y2 ∨x4 ∨x5 )
Coloreo es NP-completo
I
Probar que coloreo es NP.
Coloreo es NP-completo
I
Probar que coloreo es NP.
I
Para probar que coloreo es NP-completo, vamos entonces a
reducir SAT a coloreo.
Coloreo es NP-completo
I
Probar que coloreo es NP.
I
Para probar que coloreo es NP-completo, vamos entonces a
reducir SAT a coloreo.
Tomemos una instancia genérica de SAT ϕ = C1 ∧ · · · ∧ Cm .
Vamos a construir un grafo G y determinar un número k de
manera que ϕ sea satisfactible si y sólo si G se puede colorear
con k-colores.
Reducción de SAT a coloreo
G tiene:
I
V1 : un vértice por cada variable negada y
afirmada, todos adyacentes entre si.
I
V2 : un vértice por cada cláusula,
adyacente a los literales de V1 que no
aparecen en la cláusula.
I
V3 : otro vértice por cada variable,
adyacente a todo V2 y a los literales de V1
correspondientes a otras variables.
k = dos veces la cantidad de variables.
ϕ = (x1 ∨¬x2 ∨x3 )∧(x2 ∨¬x3 )
Reducción de SAT a coloreo
ϕ = (x1 ∨ ¬x2 ∨ x3 ) ∧ (x2 ∨ ¬x3 )
La clase Co-NP
I
Un problema de decisión pertenece a la clase Co-NP si dada
una instancia de NO y evidencia de la misma, puede ser
verificada en tiempo polinomial.
I
El problema complemento de un problema de decisión π,
π c , es el problema de decisión que responde al complemento
de la decisión de π.
Ejemplo: problema de primalidad y problema de número
compuesto.
I
El problema π c tiene respuesta NO si y sólo si π tiene
respuesta SI.
I
La clase CO-NP es la clase de los problemas complemento de
los problemas de la clase NP.
I
La clase de los problemas polinomiales (P), está contenida
también en Co-NP.
Problemas abiertos de Teorı́a de Complejidad
Con estas nuevas definiciones tenemos los siguientes problemas
abiertos:
I
¿Es P=NP?
I
¿Es Co-NP=NP?
I
¿Es P=Co-NP ∩ NP?
Las incógnitas...
NP
NP
NP
NP-Completo
NP-Completo
P = NP
NP-Intermedio
= NP-Completo
P
P
Tres mapas posibles para las clases de complejidad
Las incógnitas...
Co-NP
NP
Co-NP-Completo
NP-Completo
P
Situación si se probara que P 6= NP, NP 6= Co − NP,
P 6= Co − NP ∩ NP
Extensión de un problema
El problema π es una restricción de un problema π 0 si el dominio
de π está incluı́do en el de π 0 .
I
Se dice que π 0 es una extensión de π.
I
Si π ∈ NP-completo, entonces π 0 ∈ NP-difı́cil.
Ejemplos:
I
Viajante de comercio es una extensión de Circuito
Hamiltoniano.
I
3-SAT es una restricción de SAT.
Algoritmos Pseudopolinomiales
Un algoritmo para resolver un problema π es pseudopolinomial si
la complejidad del mismo es polinomial en función del valor (no el
tamaño!) de la entrada.
Ejemplo:
I
El problema de la mochila es NP-Completo, sin embargo,
existe un algoritmo de complejidad O(nB) que lo resuelve,
donde n es la cantidad de objetos y B el peso máximo que se
puede cargar en la mochila.
Teorı́a de Complejidad
I
¿Qué hacer ante un problema del que no sabemos en que
clase está?
I
¿Qué importancia tiene saber si un problema está en P o no,
desde el punto de vista teórico?
I
¿Qué importancia tiene la misma pregunta desde el punto de
vista práctico, o sea ante una aplicación real que se quiere
resolver?
I
¿Qué hacemos si el problema que tenemos en la práctica
sabemos que es NP-completo?
Descargar