Compartir
Publicidad
Publicidad

Problema de satisfacibilidad (SAT)

Problema de satisfacibilidad (SAT)
Guardar
2 Comentarios
Publicidad
Publicidad

Los 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

Temas
Publicidad
Comentarios cerrados
Publicidad
Publicidad
Inicio