You are on page 1of 5

Pontificia Universidad Católica de Chile

Departamento de Ciencia de la Computación


IIC1253 - Matemáticas Discretas

Solución Ayudantı́a 14
23 de noviembre de 2018
2o semestre 2018 - Profesores G. Diéguez - F. Suárez
Rudyard Jerez y Juan Ignacio Silva

Resumen
Dado un problema de decision π, llamamos Iπ el conjunto de de instancias (se puede ver como
todos los posibles candidatos a soluciones), y a Lπ ⊆ Iπ un lenguaje (son todos los candidatos
que son efectivamente aceptados).
Clase de comlejidad DTIME := problemas de decision que se pueden resolver en tiempo
polinomial P.
Clase de complejidad NP := problemas de decision en el cual chequar si una posible solucion
es aceptada o no se puede hacer en tiempo polinomial, pero encontrar una solucion, no
necesariamente en tiempo polinomial.
P ⊆ NP
Clase de complejidad NP-hard := problemas que son por lo menos tan dificiles que todos los
problemas de NP (no pertenece necesariamente a NP)
Clase de complejidad NP-completo := problemas pertenecientes a NP y que son NP-hard
Para demostrar que un problema a alguna clase de complejidad basta encontrar una reducion
hacia otro problema, es decir encontrar un problema equivalente, del cual si sepamos la
complejidad.
SAT-CNF (problema de decidir si una formula en CNF es satisfacible) es NP-Completo
CLIQUE (problema de decidir si un grafo no dirigido tiene un clique de mayor igual a 2) es
NP-completo

Pregunta 1

Considere el siguiente problema:


INDEPENDENT= {G | G es un grafo que contiene un conjunto independiente de tamaño k}
En otras palabras, las instancias I INDEPENDENT son todos los grafos y el lenguaje L INDEPENDENT
son todos los grafos que tienen un conjunto independiente de vértices de tamaño k. Demuestre que
INDEPENDENT es N P -completo.
Solución Ayudantı́a 14 - Rudyard Jerez y Juan Ignacio Silva
Solución

En primer lugar demostraremos que el problema esta en N P . Sea G(V, E) ∈ LINDEPENDENT ,


es claro que si G está en el lenguaje, entonces G debe contener un conjunto independiente V 0 .
Luego, podemos tomar el conjunto como certificado polinomial dado que |V 0 | está acotado por |V |.
Consideremos el siguiente algoritmo para verificar que V 0 es conjunto independiente en G:
checkINDEPENDENT(G(V, E), V 0 )
1: for v ∈ V 0 do
2: for u ∈ V 0 do
3: if (u, v) ∈ E then
4: return FALSE
5: end if
6: end for
7: end for
8: return TRUE

Es claro que el algoritmo corre es polinomial en O(|V 0 |2 ), luego INDEPENDENT está en N P .


Ahora sólo resta demostrar que INDEPENDENT es N P -hard, reduciremos desde CLIQUE.
Consideremos la siguiente función A : ICLIQUE → IINDEPENDENT :
A(G(V, E))
1: Sea G0 (V, E 0 )
2: for v ∈ V do
3: for u ∈ V do
4: if (u, v) ∈ / E then
5: 0
E .add((u, v))
6: end if
7: end for
8: end for
9: return G’

La función A complementa el grafo G(V, E) en tiempo polinomial acotado por O(|V |2 ). Finalmente,
por teorema visto en clases sabemos que:
G(V, E) tiene un clique ⇔ Ḡ(V, Ē) tiene un conjunto independiente
Luego la reducción es correcta e INDEPENDENT es N P -hard. 

Pregunta 2

Considere el siguiente problema:


DOBLE-SAT
= {ϕ | ϕ es una fórmula en L(P ) con al menos dos valuaciones que la satisfacen.}

2
Solución Ayudantı́a 14 - Rudyard Jerez y Juan Ignacio Silva
En otras palabras, las instancias I DOBLE-SAT son todas las fórmulas en L(P ) y el lenguaje LDOBLE-SAT
son todas las fórmulas que tienen por lo menos dos valuaciones que las satisfacen. Demuestre que
DOBLE-SAT es NP-completo.

Solución

DOBLE-SAT ∈ NP: el certificado para DOBLE-SAT son dos asignaciones de verdad, por
lo que sigue siendo polinomial con respecto al número de variables (es dos veces el largo del
certificado de SAT). Además, el algoritmo es el mismo que en SAT, salvo que lo utilizamos
dos veces, lo que sigue siendo polinomial.
DOBLE-SAT es NP-hard: La reducción se hará desde SAT. Sea una fórmula ϕ ∈ L(P ) que
menciona variables x1 , . . . , xn . Consideremos la siguiente fórmula ψ ∈ L(P ∪ {y}), donde y es
una variable proposicional que no está en P (y por lo tanto no se menciona en ϕ):

ψ = ϕ ∧ (y ∨ ¬y)

Se puede ver que claramente es de tamaño polinomial con respecto a ϕ. Ahora demostraremos
que ϕ es satisfacible si y sólo si ψ tiene al menos dos valuaciones que la satisfacen:

(⇒): Si ϕ es satisfacible, entonces existe una valuación σ : P → {0, 1} tal que σ(ϕ) = 1.
Tomemos ahora dos valuaciones σ1 , σ2 : P ∪ {y} → {0, 1}:

σ(p) if p ∈ P
σ0 (p) =
0 if p = y

σ(p) if p ∈ P
σ1 (p) =
1 if p = y

Es claro que σ0 (ϕ) = σ1 (ϕ) = 1. Luego, como (y ∨ ¬y) es una tautologı́a, tenemos que
σ0 (ψ) = σ1 (ψ) = 1, y por lo tanto ψ tiene dos valuaciones que la hacen verdad.

(⇐): Si ψ tiene dos valuaciones que la hacen verdad, es evidente que existe una valuación
σ : P ∪ {y} → {0, 1} tal que σ(ψ) = 1. Como (y ∨ ¬y) es una tautologı́a, necesariamente se
debe cumplir que σ(ϕ) = 1, y luego ϕ es satisfacible.

Pregunta 3

Decimos que un ciclo en un grafo es un cı́rculo si no repite vértices. Considere el siguiente problema:
n
Half-Circle = { G | G tiene un cı́rculo de tamaño 2 }
En otras palabras, las instancias IHALF-CIRCLE son todos los grafos y el lenguaje LHalf-Circle son
todos los grafos que contienen un cı́rculo de tamaño n2 . Demuestre que el problema Half-Circle
es NP-completo.

3
Solución Ayudantı́a 14 - Rudyard Jerez y Juan Ignacio Silva
Solución

Half-Circle ∈ NP: Es fácil notar que Half-Circle está en NP. El certificado c para el
grafo G(V, E) es la instancia del ciclo que recorre G, el cuál esta acotado polinomialmente por
la cantidad de vértices. Para verificar el certificado, podemos utilizar el siguiente algoritmo:
Algoritmo: Half-Circle(G(V, E), c = (v1 , . . . , vm ))
1: k ← 0
2: S ← {}
3: for i = 1 to m do
4: if vi , vi+1 6∈ E or vi ∈ S then
5:
6: return False
7: else
8: k ←k+1
9: S ← S ∪ {vi }
10: end if
11: end for
12: if k 6= n2 then
13:
14: return False
15: end if
16:
17: return True

Half-Circle es NP-hard: La reducción la haremos desde Hamiltoniano. Dado un grafo


G(V, E) buscamos construir G0 (V 0 , E 0 ) tal que G tiene un ciclo Hamiltoniano si y sólo si
G0 tiene un cı́rculo de tamaño V2 . La construcción consiste en conservar G0 idéntico a G a
excepción de la adición de |V | vértices aislados (un vértice aislado es un vértice que no está
conectado ningún otro).
Es claro que esta reducción es correcta. Por un lado, si G tiene un ciclo Hamiltoniano C, por
construcción el grafo G0 tiene un cı́rculo que recorre exactamente la mitad de los vértices en
0
V 0 . Por otro lado, si G0 tiene un cı́rculo de tamaño V2 , este ciclo no incluye ninguno de los
vértices aislados que añadimos. Dado que incluye la mitad de los vértices en V 0 , debe incluir
todos los vértices en V . Por lo tanto, el ciclo C 0 es un ciclo Hamiltoniano en el grafo G.
Finalmente, notemos que la construcción de G a G0 toma en tiempo polinomial, de lo que
concluimos que Hamiltoniano ∝ Half-Circle.

Pregunta 4

Definimos 3-SatSearch como el problema de buscar y retornar una valuación que satisfaga a una
fórmula ϕ en 3CNF. Demuestre que si 3-Sat puede ser resuelto en tiempo polinomial, entonces
3-SatSearch puede ser resuelto en tiempo polinomial.

4
Solución Ayudantı́a 14 - Rudyard Jerez y Juan Ignacio Silva
Hint: Recuerde que usted puede forzar el valor de una variable utilizando variables auxiliares como
en la reducción de Sat ∝ 3-Sat.

Solución

Supongamos que existe una función 3Sat(ϕ) que responde que sı́ en tiempo polinomial si ϕ en
3CNF es satisfacible y no en caso contrario. Lo que debemos buscar es un algoritmo que resuelve
3SatSearch en tiempo polinomial. Dicho algoritmo debe tomar como input una fórmula ϕ en
3CNF de n variables y k cláusulas, y debe retornar una asignación para cada variable x1 , . . . , xn
que satisfaga ϕ ó que ϕ es no satisfacible.

Notemos que es posible forzar el valor de una variable proposicional xi de la fórmula ϕ, transformando
ϕ en ϕ0 ∧ ϕ0i,v de la siguiente manera:
Para forzar xi = 1 ⇒ ϕ0i,1 = (xi ∨ y ∨ z) ∧ (xi ∨ ȳ ∨ z̄) ∧ (xi ∨ ȳ ∨ z) ∧ (xi ∨ y ∨ z̄)
Para forzar xi = 0 ⇒ ϕ0i,0 = (x̄i ∨ y ∨ z) ∧ (x̄i ∨ ȳ ∨ z̄) ∧ (x̄i ∨ ȳ ∨ z) ∧ (x̄i ∨ y ∨ z̄)

donde z e y son variables auxiliares, luego el algoritmo que buscamos es el siguiente:


Algoritmo: 3SatSearch(ϕ)
1: if 3Sat(ϕ) = False then
2:
3: return ϕ no es satisfacible
4: else
5: ϕ0 ← ϕ
6: for i = 1 to n do
7: if 3Sat(ϕ0 ∧ ϕ0i,1 ) = True then
8: ϕ0 ← ϕ0 ∧ ϕ0i,1
9: xi ← 1
10: else
11: ϕ0 ← ϕ0 ∧ ϕ0i,0
12: xi ← 0
13: end if
14: end for
15:
16: return (x1 , x2 , ..., xn )
17: end if

Justificación de ejecución polinomial: El algoritmo de arriba resuelve el loop n veces. El loop


consiste en un número constante de operaciones y llamar al algoritmo 3Sat el cual corre en tiempo
polinomial. Tras todas las iteraciones, el input ϕ crece de ϕ (con n variables y k cláusulas) a una
fórmula con n + 2 variables y k + 4n cláusulas. Finalmente ya que el tamaño del input está acotado
polinomialmente y el algoritmo corre en tiempo polinomial, concluimos que 3SatSearch puede
ser resuelto en tiempo polinomial.

You might also like