Aquí está el problema. Dado , donde cada T i ⊆ { 1 , ... , n } . ¿Hay un subconjunto S ⊆ { 1 , ... , n } con un tamaño máximo de k tal que S ∩ T i ≠ ∅ para todo i ? Estoy tratando de reducir este problema a SAT. Mi idea de una solución sería tener una variable x ipara cada uno de 1 a . Para cada T i , cree una cláusula ( x i 1 ∨ ⋯ ∨ x i k ) si T i = { i 1 , ... , i k } . Entonces y todas estas cláusulas juntas. Pero esto claramente no es una solución completa ya que no representa la restricción que S debe tener como máximo k elementos. Sé que debo crear más variables, pero simplemente no estoy seguro de cómo. Entonces tengo dos preguntas:
- ¿Está mi idea de solución en el camino correcto?
- ¿Cómo deben crearse las nuevas variables para que puedan usarse para representar la restricción de cardinalidad ?
complexity-theory
reductions
np-hard
Aden Dong
fuente
fuente
Respuestas:
Parece que está tratando de calcular una hipergrafía transversal de tamaño . Es decir, { T 1 , ... , T m } es su hipergrafía, y S es su transversal. Una traducción estándar es expresar las cláusulas como lo ha hecho, y luego traducir la restricción de longitud en una restricción de cardinalidad.k { T1, ... , Tmetro} S
Por lo tanto, utilice su codificación existente, es decir, y luego agregue cláusulas que codifiquen ∑ 1 ≤ i ≤ n x i ≤ k .⋀1 ≤ j ≤ m⋁i ∈ TjXyo ∑1 ≤ i ≤ nXyo≤ k
es una restricción de cardinalidad. Hay varias traducciones de restricciones de cardinalidad diferentes al SAT.∑1 ≤ i ≤ nXyo≤ k
La traducción de restricción de cardinalidad más simple pero bastante grande es solo . De esta manera, cada disyunción representa la restricción ¬ ⋀ i ∈ X x i - para todos los subconjuntos X de { 1 , ... , n }⋀X⊆ { 1 , ... , n } , | XEl | =k+1⋁i ∈ X¬ xyo ¬ ⋀i ∈ XXyo X { 1 , ... , n } de tamaño k + 1. Es decir, nos aseguramos de que no haya forma de que se puedan establecer más de k variables. Tenga en cuenta que este no es un tamaño polinómico en k
Algunos enlaces a documentos sobre traducciones de restricciones de cardinalidad más eficientes en espacio que son de tamaño polinómico enk :
Si realmente está interesado en resolver tales problemas, tal vez sea mejor formularlos como problemas pseudo-booleanos (vea el artículo wiki sobre problemas pseudo-booleanos ) y use solucionadores pseudo-booleanos (vea competencia pseudo-booleana ). De esa manera, las restricciones de cardinalidad son solo restricciones pseudobooleanas y son parte del lenguaje; es de esperar que el solucionador pseudobooleano las maneje directamente y, por lo tanto, de manera más eficiente.
fuente
Supongo que está buscando una reducción explícita, pero si no, siempre puede recurrir al Teorema de Cook-Levin .
fuente