« Regenerando miocardio tras un infarto Portada Los planetas se forman a partir de discos de polvo »

10 octubre 2006


Problema de satisfacibilidad (SAT)

Alfonso Jiménez

BombillaLos problemas NP-completo son los más complicados de la clase NP, en el sentido que si Q’ es un problema de decisión en NP y Q es un problema NP-completo, entonces todas las instancias de Q’ son polinomialmente reducibles a una instancia de Q. El problema de satisfacibilidad (SAT) fue el primer problema identificado como perteneciente a la clase de complejidad NP-completo por Stephen Cook en el año 1971.

Comenzamos con una lista de variables booleanas x1, …, xn. Un literal es una de las variables xi (o la negación de una de las variables ¬xi). Hay 2n literales posibles. Una cláusula es un conjunto de literales.

Las reglas del juego son las siguientes: Asignamos valores booleanos Verdadero (V) o Falso (F) a cada una de las variables. De este modo a cada uno de los literales se le asigna un valor booleano. Finalmente una cláusula tiene valor V si y sólo si al menos uno de los literales de la cláusula tiene un valor V, en otro caso tendrá un valor F.

Un conjunto de cláusulas es satisfactible si existe una asignación de valores booleanos a las variables que hagan que todas las cláusulas sean ciertas. Consideramos or entre cada unos de los literales en una cláusula y and entre las cláusulas.

El problema de satisfacibilidad (SAT). Dado un conjuntos de cláusulas. ¿Existe un conjunto de valores booleanos para una determinada expresión que la haga verdadera?

Ejemplo: Consideramos el conjunto de variables x1, x2, x3. Podemos construir la siguiente lista de cláusulas.

{x1, ¬x2} {x1, x3} {x2, ¬x3} {¬x1, x3}

Si elegimos los valores (V,V,F) para las variables (x1, x2, 3) respectivamente, entonces los valores de las cuatro cláusulas será (T,T,T,F), así que no podría ser una asignación válida para satisfacer el conjunto de cláusulas. Existen 8 posibles asignaciones (2n=3). Al final obtenemos como asignación satisfactoria a (T,T,T).

El ejemplo nos deja la sensación de que SAT debe ser un complicado problema computacional, porque hay 2n posibles conjuntos de valores que pueden resolver el problema. Está absolutamente claro, sin embargo, el problema pertenece a la clase de complejidad NP. Efectivamente, es un problema de decisión. Además podemos asignar fácilmente un certificado a todos los conjuntos de cláusulas para cual la respuesta a SAT es ‘Sí, las cláusulas son satisfactibles’. El certificado contiene un conjunto de valores, uno por cada variable, que satisface todas las cláusulas. Una máquina de Turing que recibe un conjunto de cláusulas, apropiadamente codificadas, como entrada, acompañadas del certificado tendría que verificar solamente que si los valores son asignados a las variables como se muestra en el certificado entonces efectivamente cada cláusula contiene al menos un literal de valor V. Esa verificación se realiza en tiempo polinómico.

Referencias | SAT en Wikipedia
Referencias | H.S.Wilf, Algorithms and Complexity, 1994

Más noticias sobre:  Computabilidad
Tags: , , ,
Comentarios (2) | Trackback


Comentarios

muy buen post. una pregunta, pq hay 2^3 posibles asignaciones? no he entendido muy bien esa parte

#1 | javi | 10 oct 2006 14:20:50

Buenas Javi. Existen 23 posibles asignaciones porque tenemos 3 variables. El número de posibles asignaciones está definido por 2n, siendo n el número de variables. Las posibles asignaciones son:

1.FFF
2.FFV
3.FVF
4.FVV
5.VFF
6.VFV
7.VVF
8.VVV

Saludos!

#2 | Escrito por Alfonso Jiménez | 10 oct 2006 14:43:15

¡Añade tu comentario!


Noticias relacionadas

30 mayo 2008 | La teoría de los Seis Grados de Separación
06 mayo 2008 | Teléfonos, biodiversidad y bits
25 marzo 2008 | Ordenador imita habilidades del murciélago
12 diciembre 2007 | Alan Turing y el logotipo de Apple
08 diciembre 2007 | IBM: Usando luz en vez de cables para construir una supercomputadora

 
Web www.genciencia.com