Aqui está o problema. Dado , em que cada . Existe um subconjunto com tamanho máximo de tal que para todos os ? Estou tentando reduzir esse problema para o SAT. Minha idéia de uma solução seria ter uma variável para cada um de 1 a . Para cada , crie uma cláusula se . Então e todas essas cláusulas juntas. Mas isso claramente não é uma solução completa, pois não representa a restrição de queS ⊆ { 1 , ... , n } k S ∩ t i ≠ ∅ i x i n t i ( x i 1 ∨ ⋯ ∨T i = { i 1 , ... , i k }deve ter no máximo elementos. Eu sei que preciso criar mais variáveis, mas simplesmente não sei como. Então, eu tenho duas perguntas:
- A minha ideia de solução está no caminho certo?
- Como as novas variáveis devem ser criadas para que possam ser usadas para representar a restrição de cardinalidade ?
complexity-theory
reductions
np-hard
Aden Dong
fonte
fonte
Respostas:
Parece que você está tentando calcular um hipergrafo transversal do tamanho . Ou seja, é seu hipergrafo e é sua transversal. Uma tradução padrão é expressar as cláusulas como você possui e depois converter a restrição de comprimento em uma restrição de cardinalidade.k {T1,…,Tm} S
Portanto, use sua codificação existente, ou seja, e adicione cláusulas que codificam .⋀1≤j≤m⋁i∈Tjxi ∑1≤i≤nxi≤k
A conversão de restrição de cardinalidade mais simples, porém bastante grande, é apenas . Dessa forma, cada disjunção representa a restrição - para todos os subconjuntos de do tamanho k + 1. Ou seja, garantimos que não há como definir mais de k variáveis. Observe que esse não é o tamanho polinomial em ¬ ⋀ i ∈ X X i X { 1 , ... , n } k⋀X⊆{1,…,n},|X|=k+1⋁i∈X¬xi ¬⋀i∈Xxi X {1,…,n} k
Alguns links para artigos sobre traduções de restrições de cardinalidade com maior eficiência de espaço e tamanho polinomial emk :
Se você está realmente interessado em resolver esses problemas, talvez seja melhor formulá-los como problemas pseudo-booleanos (consulte o artigo da wiki sobre problemas pseudo-booleanos ) e use solucionadores pseudo-booleanos (consulte competição pseudo-booleana ). Dessa forma, as restrições de cardinalidade são apenas restrições pseudo-booleanas e fazem parte da linguagem - espero que o solucionador pseudo-booleano as manipule diretamente e, portanto, com mais eficiência.
fonte
Suponho que você esteja procurando uma redução explícita, mas, se não, pode sempre voltar ao Teorema de Cook-Levin .
fonte