You are on page 1of 21

Temas Selectos de Programación Avanzada

Unidad I. Complejidad Computacional

1. Conceptos de complejidad computacional


1.1 Conceptos básicos
Problema de decisión. Un problema de decisión π = (D,Y), es una pareja
formada por un conjunto de instancias D, las cuales se obtienen a partir de una
instancia genérica que se especifica en términos de varios componentes:
conjuntos, funciones números, etc., y un subconjunto de sí-instancias Y ⊆ D. Una
instancia i∈Y, si y sólo si, la respuesta a la cuestión del problema es sí para esa
instancia.
Un problema de decisión se asocia con un lenguaje formal usando algún
mecanismo de codificación.
El lenguaje asociado a un problema de decisión esta formado por todas
las cadenas codificadas de sus sí-instancias.
Lenguaje decidido. Se dice que una máquina decide Turing decide a un
lenguaje dado L, si y solo si la máquina computa una función f tal que f(w)=SI y
solo si w∈L (f(w)=NO y solo si w∉L) .
Lenguaje aceptado. Se dice que una máquina de Turing acepta a un
lenguaje si y solo si para toda cadena del lenguaje la máquina alcanza el estado
de terminación.
Algoritmo determinista. Máquina de Turing determinista.
Algoritmo no determinista o aleatorio. Máquina de Turing no
determinista.
Se dice que un algoritmo resuelve un problema de decisión si y sólo si,
el lenguaje asociado al problema es decidido (aceptado) por la máquina de
Turing determinista (no determinista) correspondiente al algoritmo.
El tiempo de ejecución de un algoritmo es el número de pasos que
ejecuta la máquina correspondiente en el proceso.
Equivalencia entre máquinas de Turing. Una máquina determinista es
una máquina no determinista.
Simulación de máquinas no deterministas. Una máquina no
determinista se puede simular en una máquina determinista de tiempo
exponencial.
Clase P. Es el conjunto de todos los problemas de decisión que pueden ser
resueltos en tiempo polinomial por un algoritmo determinista. A los problemas
que pertenecen a esta clase se les denomina tratables.
Problemas intratables. Son todos los problemas de decisión para los que
no existe algún algoritmo determinista de tiempo polinomial que los resuelve.
Son todos los problemas que están en Pc.
Clase NP. La clase NP es el conjunto de todos los problemas de decisión
que pueden ser resueltos en tiempo polinomial con un algoritmo no determinista.
Relación entre P y NP. Como toda máquina determinista es un caso
particular de una máquina no determinista, se tiene entonces que P ⊆ NP.
Transformación polinomial. Se dice que un problema de decisión
π 1=(D1, Y1) se puede transformar polinomialmente en el problema de decisión
π 2=(D2, Y2), si y sólo si, existe una función f: D1→ D2 que satisface las siguientes
dos condiciones:
1. f es computable con un algoritmo determinista de tiempo polinomial.
2. Para toda instancia i∈D1, i∈Y1, si y sólo si, f(i)∈Y2.
En tal caso se dice que π 1 ≤P π 2.

Teorema 1. Si π 1 ≤P π 2 ∧ π 2 ≤P π 3 entonces π 1 ≤P π 3

Demostración:

Hipótesis: π 1 ≤P π 2 ∧ π 2 ≤P π 3

Meta: π 1 ≤P π 3

Sean π 1,π 2 y π 3 problemas de decisión tales que π 1 ≤P π 2 ∧ π 2 ≤P π 3

Como π 1 ≤P π 2 → D2 tal que i ∈ Y1 , sí y solo sí, f (i ) ∈ Y2


=> ∃ f : D1 

También, como π 2 ≤P π 3 → D3 tal que j ∈ Y2 , sí y solo sí,


=> ∃ f : D2 
g ( j ) ∈ Y3
Por lo tanto si se considera la función h = f og , considerando que h(x)=g(f(x)),
entonces h es computable ya que es la composición de dos funciones
computables.

Por otra parte, con base en la definición de f,


i ∈ Y1 , sí y solo sí, f (i ) ∈ Y2 .
Ahora con base en la definición de g ,
f (i ) ∈ Y2 , sí y solo sí , g(f(i))∈ Y3

Se concluye entonces que:


i ∈ Y1 , sí y solo sí, h(i ) ∈ Y3
∴ π 1 ≤P π 3

Equivalencia polinomial. Se dice que dos problemas de decisión π 1 y


π 2 son polinomialmente equivalentes (π 1 ∞ π 2 ) si y solo si π 1 ≤P π 2 ∧π 1 ≤P
π 2.

Teorema 2. La relación ∞ es de equivalencia.

Demostración:
Por demostrar que:
a) π 1∞π 1 (reflexiva)
b) π 1∞π 2 entonces π 2 ∞π1 (simétrica)
c) π 1∞π 2 ∧ π 2 ∞π 3 entonces π 1∞π 3 (transitiva)

a) Demostrar que π 1∞π1 (π 1 ≤P π 1 ∧ π 1 ≤P π 1)


Como π 1∞π 1 significa que π 1 ≤P π 1 ∧ π 1 ≤P π 1, solo basta probar que π 1 ≤P
π 1
Entonces sea f : D1  → D1 tal que f (i ) = i
Se tiene que i ∈ Y1 , sí y solo sí, f(i))∈ Y1
=>π 1 ≤P π 1
∴π 1∞π 1

b) Demostrar que si π 1∞π 2 , entonces π 2∞π1


Hipótesis: π 1∞π 2
Meta: π 2 ∞π1
Sean π 1 y π 2 problemas de decisión tales que π 1∞π 2
=> π 1 ≤P π 2 ∧ π 2 ≤P π 1
=> π 2 ≤P π 1 ∧ π 1 ≤P π 2
∴ π 2 ∞π 1
c) Demostrar que si π 1∞π 2 ∧ π 2 ∞π 3 entonces π 1∞π 3
Hipótesis: π 1∞π 2 ∧ π 2 ∞π 3
Meta: π 1∞π 3

Sean π 1, π 2 y π 3 problemas de decisión tales que π 1∞π 2 ∧ π 2 ∞π 3


=> (π 1 ≤P π 2 ∧ π 2 ≤P π 1)∧(π 2 ≤P π 3 ∧ π 3 ≤P π 2)
=> (π 1 ≤P π 2 ∧ π 2 ≤P π 3)∧(π 3 ≤P π 2 ∧ π 2 ≤P π 1)
=> π 1 ≤P π 3 ∧ π 3 ≤P π 1
∴ π 1 ∞ π3

Problema NP-completo. Un problema π es NP-completo si y sólo si,


π ∈ NP y ∀ π ’∈NP, π ’≤P π .
Al conjunto de todos los problemas NP-completos se le denota por NPC.

Teorema 3. Si π 1, π 2 ∈NP, π 1∈NPC y π 1 ≤P π 2, entonces π 2∈NPC


Demostración
Hipótesis: π 1, π 2 ∈NP, π 1∈NPC y π 1 ≤P π 2

Meta: π 2∈NPC
Sean π 1, π 2 ∈NP, π 1∈NPC y π 1 ≤P π 2

Como π 2 ∈NP, solo falta probar que ∀ π ’∈NP, π ’≤P π 2.


Sea π ’∈NP
=> como π 1∈NPC, por definición de NPC se tiene que π ’≤P π 1

Pero por hipótesis π 1 ≤P π 2,

=> por transitividad π ’≤P π 2

∴ π 2∈NPC
Teorema 4. Si π ∈ NPC, entonces π ∈ P, si y sólo si, P = NP.
Demostración
(=>)
Hipótesis: π ∈ NPC ∧ π ∈ P
Meta: P =NP ( P ⊂ NP ∧ NP ⊂ P )

Como por definición P ⊂ NP , solo falta probar que NP ⊂ P

Sea π ∈ NPC ∧ π ∈ P y π * ⊂ NP
=>π * ≤P π (por definición de NPC)
Sean f : D *  → D una función computable
tal que i ∈ Y * , sí y solo sí f (i) ∈ Y
y
g : D 
→{sí, no}
tal que
i ∈ Y , sí y solo sí g (i ) ∈ sí

Sea h = f og : D *  →{sí , no}


tal que
i ∈ Y , sí y solo sí h(i ) = g ( f (i ) ) = sí
=> h es una función computable que decide a π *
=> π * ∈ P
=> NP ⊂ P
∴ P =N P

(<=)
Hipótesis π ∈ NPC y P = NP
Meta: π ∈ P

Sea π ∈ NPC y supongamos que P =NP.


Entonces por definición de NPC, π ∈ NP.
Pero como P=NP,
∴ π∈ P

Teorema 5. Sí π 1 y π2∈ N P C entonces π 1∞ π2

Demostración
Hipótesis: π 1 y π2∈ N P C
Meta: π 1∞ π2 (π 1 ≤P π 2 ∧ π 2 ≤ P π 1)

Sean π 1 y π2∈ N P C

Entonces como
π1∈ NP
=> π 1 ≤P π 2 (por definición de NPC)

Pero como también


π 2∈NP
=> π 2 ≤P π 1 (por definición de NPC)
∴ π 1 ∞ π2

2. Prueba de que un problema de decisión esta en NP


Para probar que un problema de decisión pertenece a la clase NP se debe:
a). definir una estructura de datos para representar las soluciones candidatas
b). construir un algoritmo aleatorio para generar una solución candidata
c). construir un algoritmo determinista para verificar que una solución candidata
cumple las condiciones especificadas en el problema.

Ejemplo: Probar que el problema del k-clique esta en NP.


Demostración:
Definición del problema del k-clique
Entrada: Un grafo G y un entero k
Pregunta: Tiene G un clique, un subconjunto de vértices
completamente conectado, de tamaño k?

Representación de solución candidata:


x[i] i=1,…,k
Algoritmo aleatorio de complejidad O(k) para generar una solución
candidata x :
for i=1 to k do x[i] := genera_aleatoriamente_componente(i); endfor

Algoritmo determinista de complejidad O(k2) que permite verificar si


una solución candidata x, es un k-clique:
// verifica que una solución candidata es un clique de tamaño k
for i=1 to k do
for j=i+1 to k do
if ( x[i] = x[j] or (x[i],x[j]) no es una arista ) then return (no);
// El conjunto de vértices en x no es un clique,
// porque tiene vértices repetidos o existe al menos un par
// de vértices no conectados
endif
endfor
endfor
return(si); /*El conjunto de vértices en x es un k-clique*/

3. Prueba de que un problema de decisión es NP-completo


Para probar que π es NP-completo se debe:
1. Probar que π esta en NP
2. Construir una transformación polinomial que convierta una instancia de π en
una instancia de un problema NP-completo π *, e inversamente. Antes de
realizar los pasos 3 y 4, se debe entender con claridad como se realiza esta
transformación en uno y otro sentido. Si es necesario realice un ejemplo para
describir su funcionamiento. Si no puede mostrar un ejemplo, significa que no se
tiene claro como opera la transformación.
3. Probar que la trasformación asocia una si-instancia de π con una si-instancia
de π *.
4. Probar que la trasformación asocia una si-instancia de π * con una si-instancia
de π .

Ejemplo. Probar que el problema del k-clique es NP_completo


Demostración:
1. k-clique esta en NP
(ver demostración en ejemplo anterior)
2. Transformación polinomial SAT < k_clique
Sea F una expresión booleana.
F se puede poner en forma normal conjuntiva: F=F1F2...Fr
donde cada cláusula Fi es una suma de literales
Sean k=r y el grafo G=(V,E) definido como sigue:
V={<xi,Fj> | xi es una literal en Fj}
E={(<xi,Fj> , <ys,Ft>) |F j !=Ft and xi != ¬ys}

Se prueba primero que si F es satisfactible, entonces G tiene un k-clique.


Suponga que F es satisfactible
Esto significa que hay una asignación a las variables que hace F igual a 1
Esto implica que F1=1, F2=1, ... , Fr=1
Entonces cada cláusula Fi contiene al menos una variable zi con valor 1.
Entonces <z1,F1>, <z2,F2>, ... , <zk,Fk> es un k-clique en G porque:

 Son k nodos distintos y


 Cada par (<zi,Fi> , <zj,Fj>) forma una arista ya que
Fi != Fj y zi != ¬ zj debido a que ambos tienen valor 1.

Ahora se prueba que si G tiene un k-clique, entonces F es satisfactible


Suponga que G tiene un conjunto de vértices <u1,F1>, <u2,F2>, ... , <uk,Fk> que
son un k-clique.
Entonces, hay una arista entre cualquier par de vértices del conjunto.
Por lo tanto, los k vértices corresponden a k diferentes cláusulas, uno por
cláusula, porque dos vértices que correspondan a la misma cláusula no pueden
ser adyacentes.
Además como son adyacentes, para cada par de vértices ui != ¬uj.
Por lo tanto si se asigna a cada ui el valor de 1, esta asignación hace que cada Fi
sea igual a 1 (porque ui es una variable aditiva en Fi).
Por lo tanto, F es igual a 1.
Se concluye que el k-clique es NP_completo.

4. Problemario:
1. Probar que los siguientes problemas de decisión están en NP:
3SAT, k-clique, recubrimiento de vértices (Vertex Covering VC),
recubrimiento de conjuntos (Set Covering SC).

2. Probar que los siguientes problemas de decisión están en NPC:


3SAT, k-clique, recubrimiento de vértices (Vertex Covering VC),
recubrimiento de conjuntos (Set Covering SC).

3. Probar formalmente los siguientes teoremas:


3.1 Si π ∈ NPC, entonces π ∈ P, si y sólo si, P = NP
3.2 π ∈ NPC, si y solo si π ∈ NP y existe π *∈NPC tal que π * ≤P π .
3.3 Se dice que dos problemas de decisión π 1 y π 2 son polinomialmente
equivalentes (π 1 ∞ π 2 ) si y solo si π 1 ≤P π 2 y π 1 ≤P π 2. Probar que la
relación polinomialmente equivalente ∞ es de equivalencia.
3.4 Si π 1, π 2∈ NPC, entonces π 1 ∞ π 2

3.5 Si el espacio de soluciones candidatas de un problema de decisión es de


orden polinomial, entonces el problema pertenece a la clase P.
3.6 Si un problema de decisión tiene un espacio de soluciones no polinomial
entonces no necesariamente pertenece a la clase P. (muestre un ejemplo de
un problema cuyo espacio de soluciones sea no polinomial y para el cual
se puede construir un algoritmo de tiempo polinomial que lo resuelve).
4. Determinar la complejidad de los algoritmos de búsqueda en profundidad, en
anchura, Kruskal, Prim y Dijkstra.

Bibliografía
1. Computers and Intractability
Garey and Johnson
La mayor parte del temario se realizó con base en el capítulo 2 de este
libro. En particular todo el desarrollo teórico a partir de la definición de
reducción polinomial y problemas NP_completos. Este marco
axiomatizado es el que sirve de base para resolver los problemas en los
que se pide probar diferentes teoremas relativos a la NP_completez.
5. Fundamentos de la Computación
Navarro
De estas notas se toma la definición de decisión y aceptación de lenguajes
(capítulo 4), conceptos que son utilizados para definir las clases P y NP. En el
capítulo 6 se pueden encontrar la prueba de NP_completez para varios
problemas. En principio las pruebas que realiza el autor pueden servir de base
para la construcción de pruebas con base en las especificaciones del temario.
En general a las pruebas que se presentan les hace falta detallar la prueba de
que el problema esta en NP y definir detalladamente la transformación.
6. Introduction to Algorithms
Cormen, Leiserson and Rivest
Para resolver los problemas relativos a los algoritmos de búsqueda en
profundidad, en anchura, Kruskal, Prim y Dijkstra, se debe utilizar el
material de este texto relativo a algoritmos de grafos (pg. 463-532 versión
impresa) (527-598 versión electrónica)

7. Ejercicios Resueltos

7.1 Definición de 3-SAT


Es el conjunto de fórmulas proposicionales satisfactibles en FNC, donde
ninguna disyunción tiene más de 3 literales.

Problema 3-SAT

Entrada:
Un vector de variables binarias v=(v1,v2,…vm), una función booleana
F(v)=F1(v) ^ F2(v) ^ …..^ Fn(v), en la cual las ninguna de cláusulas
disyuntivas Fi contiene más de 3 variables booleanas naturales o negadas.

Pregunta:
¿Existe una asignación de valores a las variables booleanas v, que hacen
verdadera a F(v)?.

Representación interna del problema.


En los algoritmos se utilizan básicamente dos estructuras de datos: una para
almacenar los valores signados a las variables booleanas y otra para
almacenar la función booleana F.

Las variables booleanas se mantienen en el vector binario v=(v1,v2,…vm).

La función booleana F se registra en la matriz MF.


La cláusula Fi de F se almacena en el renglón i de MF, registrando los
números de las variables booleanas que contiene. Si una variable aparece
negada se registra el número negativo de dicha variable.
La matriz MF es de tamaño n x 3.

Teorema: 3-SAT es NP-Completo

Demostración:

3-SAT está en NP

Representación de solución candidata:


v[i] i=1,…,n
Algoritmo aleatorio de complejidad O(n) para generar una solución
candidata v :
for i=1 to n
If (random()<0.5) v[i]=0 else v[i]=1

Algoritmo determinista de complejidad O(n) que permite verificar si una


solución candidata v, es una si_instancia de 3-SAT
for i=1 to n
{
clausula=0
for j=1 to 3
clausula=clausula OR v[MF[i][j]]
if (clausula=0) Return (NO)
}
Return (SI)

SAT<p3-SAT
Descripción de la transformación
Si F(v)=F1(v) ^ F2(v) ^ …..^ Fn(v) es la función booleana de SAT, entonces
F’(v)=F’1(v) ^ F’2(v) ^ …..^ F’n(v) es la función booleana en 3-SAT que se
obtiene al transformar cada Fi en F’i.
Transformación de Fi en F’i.
a) Si Fi tiene a lo más 3 literales entonces en F’i =Fi.
b) Si Fi tiene mas de 3 literales
Sea Fi=x1 ∨x2 ∨ …..∨ xk con xj = vr o xj = ∼ vr r∈{1,2,…n}

Ahora se introducen las nuevas variables binarias y1,y2,…,yk-3 y se transforma


Fi en:
F’i= (x1 ∨x2 ∨ y1)∧(∼ y1 ∨x3 ∨ y2) ∧(∼ y2 ∨x4 ∨ y3) ∧……
…… ∧(∼ yk-4 ∨xk-2 ∨ yk-3) ∧(∼ yk-3 ∨xk-1 ∨ xk)

Se prueba primero que si F es satisfactible entonces F’ es satisfactible


Si F es satisfactible, existe una asignación de valores a las variables
booleanas v que hace verdadero cada cláusula Fi.

Dentro de cada Fi, al menos uno de los literales xj se hace verdadero con
esta asignación.
Si se conserva dicha asignación para F’i , ahora se muestra como asignar
valores a los yl que hagan verdadera a F’i .

Si 3 ≤ j ≤ k -2, se puede asignar yj-2 = 1 y yj-1 = 0,


ya que (∼ yj-2 ∨xj ∨yj-1) se mantiene verdadero.

El valor asignado a yj-2 hace verdadera la disyunción anterior,


(∼ yj-3 ∨xj-1 ∨yj-2),
lo cual permite asignar yj-3 = 1 y seguir la cadena hacia atrás.

Similarmente, el valor asignado a yj-1 hace verdadera la disyunción


siguiente,
(∼ yj-1 ∨xj+1 ∨yj),
lo que permite asignar yj = 0 y continuar la cadena hacia adelante.

Como todas las cláusulas de F’ son verdaderas, entonces es satisfactible


con la asignación de valores descrita anteriormente.
Ahora se prueba que si F’ es satisfactible entonces F es satisfactible
Si F’=F’1 ^ F’2 ^ …..^ F’q es satisfactible, hay una asignación de valores
a las variables booleanas de F’ que hace verdaderas todas sus cláusulas.

Supongamos que F no es satisfactible, entonces para la asignación de


valores que satisface a F’, existe al menos una cláusula Fi que es falsa para
dicha asignación.

Como Fi es falsa, todas sus literales xj son falsas.

Por otra parte


F’i= (x1 ∨x2 ∨ y1)∧(∼ y1 ∨x3 ∨ y2) ∧(∼ y2 ∨x4 ∨ y3) ∧……
…… ∧(∼ yk-4 ∨xk-2 ∨ yk-3) ∧(∼ yk-3 ∨xk-1 ∨ xk)
es verdadera ya que F’ es satisfactible.
Ahora :
como x1 y x2 son falsas, entonces y1 es verdadera;
como ∼ y1 y x3 son falsas, entonces y2 es verdadera.
Siguiendo de esta manera se establece que yk-3 es verdadera, lo cual
implica que la última cláusula es falsa ya que ∼ yk-3, xk-1y xk son
falsas.
Esto significa que F’i es falsa y que por tanto que F’ no es
satisfactible lo cual contradice la hipótesis de que F’ es
satisfactible.

Como la suposición de que F no es satisfactible conduce a la


contradicción anterior, entonces se concluye que F es
satisfactible.

Se concluye entonces que 3-SAT es NP-completo


7.2 Definición de k-clique
Un k-clique de un grafo no dirigido G=(V,E), es un subconjunto de k vértices
completamente conectado.

Problema k-clique

Entrada:
Un grafo no dirigido G=(V,E) y un entero k.
Pregunta:
¿G tiene un clique de tamaño k?

Representación interna del problema.


En los algoritmos se utilizan dos estructuras de datos: una para almacenar el
subconjunto de k vértices y otra para almacenar las aristas del grafo.

El subconjunto de vértices se registra en el vector de enteros x=(x1,x2,…xk).

Las aristas del grafo s registran en una matriz de adyacencia binaria A. La


matriz es de tamaño n x n donde n es el número de vértices del grafo.

Teorema: k-clique es NP-Completo.


Demostración:
k-clique es NP
Representación de solución candidata:
x[i] i=1,…,k
Algoritmo aleatorio de complejidad O(k) para generar una solución
candidata x :
for i=1 to k x[i] =random(1:n)

Algoritmo determinista de complejidad O(k2) que permite verificar si


una solución candidata x, es un k-clique:
for i=1 to k
for j=i+1 to k
if ( x[i] == x[j] or A[x[i]][x[j]]==0) ) Return (NO)
Return(SI)
SAT<p k-clique

Descripción de la transformación
Sea F=F1 ^ F2 ^ …..^ Fr la función booleana de SAT.
Sean k=r y el grafo G=(V,E) definido como sigue:
V={<xi,Fj> | xi es una literal en Fj}
E={(<xi,Fj> , <ys,Ft>) |F j !=Ft and xi != ∼ ys}

Se prueba primero que si F es satisfactible, entonces G tiene un k-clique.


Suponga que F es satisfactible
Esto significa que hay una asignación a las variables que hace F igual a 1
Esto implica que F1=1, F2=1, ... , Fr=1
Entonces cada cláusula Fi contiene al menos una variable zi=1.
Entonces <z1,F1>, <z2,F2>, ... , <zk,Fk> es un k-clique en G porque:

 Son k nodos distintos y


 Cada par (<zi,Fi> , <zj,Fj>) forma una arista ya que
Fi != Fj y zi != ¬ zj debido a que ambos tienen valor 1.

Ahora se prueba que si G tiene un k-clique, entonces F es satisfactible


Suponga que G tiene un conjunto de vértices <u1,F1>, <u2,F2>, ... , <uk,Fk>
que son un k-clique.
Entonces, hay una arista entre cualquier par de vértices del conjunto.
Por lo tanto, los k vértices corresponden a k diferentes cláusulas, uno por
cláusula, porque dos vértices que correspondan a la misma cláusula no
pueden ser adyacentes.
Además como son adyacentes, para cada par de vértices ui != ¬uj.
Por lo tanto si se asigna a cada ui el valor de 1, esta asignación hace que
cada Fi sea igual a 1 (porque ui es una variable aditiva en Fi).
Por lo tanto, F es igual a 1 y por lo tanto satisfactible

Se concluye entonces que el k-clique es NP_completo.

7.3 Definición de recubrimiento de vértices (VC)


Un recubrimiento de vértices de tamaño k de un grafo no dirigido G = (V, E)
es un subconjunto de k vértices V´ tal que para toda arista (u, v) ∈E, se tiene
que u∈ V’ o v ∈V’.

Problema de recubrimiento de vértices (VC)

Entrada:
Un grafo no dirigido G= (V, E) y un entero k.
Pregunta:
¿G tiene un recubrimiento de vértices de tamaño k?

Representación interna del problema.


En los algoritmos se utilizan dos estructuras de datos: una para almacenar el
subconjunto de k vértices y otra para almacenar las aristas del grafo.

El subconjunto de vértices se registra en el vector de enteros x=(x1,x2,…xk).

Las aristas del grafo s registran en una matriz de adyacencia binaria A. La


matriz es de tamaño n x n donde n es el número de vértices del grafo.

Teorema: VC es NP-Completo.
Demostración:
VC es NP
Representación de solución candidata:
x[i] i=1,…,k
Algoritmo aleatorio de complejidad O(k) para generar una solución
candidata x :
for i=1 to k x[i] =random(1:n)

Algoritmo determinista de complejidad O(kn2) que permite verificar si


una solución candidata x, es un recubrimiento de vértices:
for i=1 to k
for j=i+1 to k
if ( x[i] == x[j] ) Return (NO)
for i=1 to n
for j=1 to n
if (A[i][j]=1)
{
c=0
for l= to k
if (v[k]=i or v[k]=j) c=1
if (c=0) Return (NO)
}
Return(SI)

k-clique<p VC

Descripción de la transformación
Sea G=(V,E) un grafo no dirigido.
Sea el grafo G’=(V,E’) donde E’es el complemento de las aristas E.
Construidos de esta manera los grafos G y G’, un par de vértices
conectados en G no están conectados en G’ e inversamente.

Se prueba primero que si G tiene un clique, entonces G’ tiene un


recubrimiento de vértices.
Suponga que G tiene un clique V’.
Entonces todos los vértices de V’ están conectados unos con otros en G.
Por lo tanto los vértices de V’ no están conectados unos con otros en G’.
Los vértices de V’ están conectados en G’ con vértices que están fuera de
V’(en V-V’).
Por otra parte todas las aristas de G’ tienen al menos uno de sus vértices
en V-V’, ya que si no fuera así hay al menos una arista de G’ cuyos dos
vértices no estarían en V-V’.
En tal caso dichos vértices deben estar en V’ y como son una arista de G’
los dos vértices de V’ deben estar conectados en G’ lo cual no es posible
como se estableció anteriormente.
Por lo tanto V-V’ es un recubrimiento de vértices de G’.

Ahora se prueba que si G’ tiene un recubrimiento de vértices, entonces G


tiene clique.
Sea V’ un recubrimiento de vértices en G’.
Entonces todas las aristas de G’ tienen uno de sus vértices en V’.

Ahora los vértices de V-V’ no están conectados entre si unos con otros, ya
que si al menos dos de ellos estuvieran conectados V’ no sería un
recubrimiento de vértices de G’.

Por otra parte, como los vértices de V-V’ no están conectados en G’,
entonces todos están conectados entre sí en G.
Esto significa que V-V’ es un clique en G.

Por lo tanto VC es NP-completo.

7.4 Definición de recubrimiento de conjuntos (SC)


Dados los conjuntos S1, S2, ….., Sn, un recubrimiento de conjuntos es un
grupo de k conjuntos Si1 , Si2 , …, Sik , tal que U1≤j≤k Sij =U1≤i≤n Si.

Problema de recubrimiento de vértices (VC)

Entrada:
Dados los conjuntos S1, S2, ….., Sn y un entero k.
Pregunta:
¿Existe un recubrimiento de conjuntos de tamaño k?

Representación interna del problema.


En los algoritmos se utilizan dos estructuras de datos: una para almacenar los
conjuntos dados y otra para almacenar a los conjuntos del posible
recubrimiento.

Sea m el número de elementos totales en los conjuntos dados.


Para registrar cada conjunto se utiliza un vector binario de tamaño m, donde
cada elemento del vector corresponde con un posible elemento del conjunto.
Si la posición es 1 el elemento correspondiente esta en el conjunto. Si el
elemento no está en el conjunto se coloca un 0.

Los n vectores correspondientes a los conjuntos dados, se integran en una sola


matriz M de tamaño n x m.

Los k vectores de un posible recubrimiento se integran en la matriz R de


tamaño k x m.

Teorema: SC es NP-Completo.
Demostración:
SC es NP
Representación de solución candidata:
Matriz R[k][m]
Algoritmo aleatorio de complejidad O(km) para generar una solución
candidata R :
for i=1 to k
for j=1 to if (random()<0.5) R [i][j] =0 else R [i][j] =1

Algoritmo determinista de complejidad O(mn) que permite verificar si


una solución candidata R, es un recubrimiento de vértices:
for i=1 to m SM[i]=0
for i=1 to m SR[i]=0

for i=1 to m
for j=1 to n
SM[i]=SM[i] OR M[i][j]
for i=1 to k
for j=1 to n
SR[i]=SR[i] OR R[i][j]

for i=1 to m
if (SM[i]!=SR[i]) Return NO
Return SI

VC<p SC

Descripción de la transformación
Sea G=(V,E) un grafo no dirigido.
Sean los conjuntos Sv={(u,v)∈E} para cada v∈V.
Para cada vértice v de G, Sv es el conjunto de todas las aristas que inciden
en v.
Se observa también que la unión de todos los conjuntos Sv, incluye todas
las aristas E de G.

Se prueba primero que si G tiene un recubrimiento de vértices, entonces los


conjuntos Sv tienen un recubrimiento de conjuntos.
Suponga que G tiene un recubrimiento de vértices v1,v2,…,vk.
Entonces todas las aristas E de G inciden en al menos uno de los vértices
del recubrimiento anterior.
Por lo tanto la unión de los conjuntos Sv1, Sv2, …Svk incluye todas las
aristas E de G.
Pero como se señaló anteriormente, la unión de los conjuntos S v v∈V,
también es igual a E.
Por lo tanto los conjuntos Sv1, Sv2, …Svk son un recubrimiento de
conjuntos de los conjuntos Sv v∈V

Ahora se prueba primero que si los conjuntos Sv tienen un recubrimiento


de conjuntos, entonces G tiene un recubrimiento de vértices.
Sean los conjuntos Sv1, Sv2, …Svk un recubrimiento de conjuntos de los
conjuntos Sv v∈V
Por definición la unión de los conjuntos Sv v∈V, es igual a E.
Ahora como los conjuntos Sv1, Sv2, …Svk son un recubrimiento de los
conjuntos Sv v∈V, entonces la unión de dichos conjuntos es también igual
a E.
Esto implica que todas las aristas E de G inciden en alguno de los vértices
v1,v2,…,vk
Se concluye entonces que dichos vértices son un recubrimiento de vértices
de G.
Por lo tanto SC es NP-Completo

You might also like