Quanto podemos reduzir o número de cláusulas convertendo de -SAT para -SAT?


8

Se supusermos que começamos com uma instância de -SAT e tentarmos converter o problema em uma instância de -SAT, onde existem literais por cláusula, podemos garantir uma redução no quantidade total de cláusulas?k(k+m)(k+m)

Depois de postar, percebi que não podemos garantir que o número de cláusulas possa ser reduzido. No entanto, gostaria de saber se temos cláusulas, poderíamos obter algo como cláusulas por alguma técnica de "redução"?nn/k+O(1)

Em caso afirmativo, quanto podemos garantir que o número total de cláusulas possa ser reduzido em? Por exemplo, se começarmos com -SAT com cláusulas , qual é a menor garantida , a nova quantidade de cláusulas que resultará se convertermos essa instância em -SAT?knknk+m(k+m)

Mais importante, como realizamos essa conversão?

Respostas:


5

Um tipo de conversão é simplesmente o inverso da conversão k-sat-para-3-sat:

Lembre-se, a conversão de k-sat em "j" -sat, j<k:

(x1x2...xj...xk)(x1x2...xjd)(d¯xj+1xj+2...xk)

Aqui, dé uma variável fictícia, que significa algo como "Esta cláusula não é verdadeira, mas outra cláusula que eu conheço é". A outra cláusula é a cláusula seguinte que foi separada da original. O exemplo acima é um exemplo em que2jk, caso contrário, o segundo nó de divisão ainda será maior que j, e devemos dividi-lo novamente, da mesma maneira.

Invertendo a conversão

(x1x2...xj)(x¯jxj+1...xk) então você pode combinar as cláusulas em:

(x1x2...xj1xj+1xj+2...xk)

Observe a falta xj nesta nova fórmula.

Obviamente, você não tem garantia de encontrar cláusulas como essa em uma fórmula arbitrária, portanto, a menor garantiank+m é igual a nk.

No entanto, em fórmulas comuns, uma variável e sua negação aparecerão na fórmula; caso contrário, você pode executar a eliminação literal literal (descrita aqui ). Para simplificar, vamos também assumir quek+m2k2. Então podemos combinar duas cláusulas que contêm um literal em uma e sua negação na outra. Como todo literal deve ter outra cláusula com negação, pode-se adivinhar empiricamente que você deve ser capaz de reduzir pela metade o número de cláusulas (você pode ficar preso a alguns literais e suas negações em cláusulas já unidas e, assim, ficará preso a algumas cláusulas não articuláveis ​​no final; juntar cláusulas como essa pode ser outro problema interessante).

EDITAR:

Após reflexão, percebi que xjdeve ser gratuito e não ser usado em nenhum outro lugar da fórmula para recolher as duas cláusulas às quais pertence. Portanto, esse tipo de cláusula (uma contendo um literal e a outra sua negação, com esse literal não sendo usado em nenhum outro lugar da fórmula) é muito mais raro do que eu pensava anteriormente. Portanto, a resposta real é que não há garantia de quanto podemos reduzir o número de cláusulas na fórmula.


Como você conseguiu essa fórmula de conversão? Parece-me incorreto, e você pode verificá-lo pela tabela da verdade.
precisa

Olá, li há muito tempo, mas você pode vê-lo aqui . Eu poderia ter digitado errado, ou de alguma forma ter deixado algo claro na conversão; Nesse caso, sinta-se à vontade para apontar.
Realz Slaw

@ MattGroff Parece que não consigo encontrar meu erro, você pode fornecer um exemplo contrário?
Realz Slaw

O exemplo de contador que verifiquei foi começar com uma única cláusula, (UMAB). Eu então divido isso em duas cláusulas,(UMAd)(d¯B), Onde d¯ indica "não d". Se você verificar isso em uma tabela verdade, eles não devem ser iguais. Estarei esperando ansiosamente para saber se você obtém os mesmos resultados. Além disso, acredito que sei como podemos corrigir essa resposta para que ela funcione. , se se verificar que o original k-SAT com "j" conversão -SAT está incorreta ...
Matt Groff

ABAB(Ad)(d¯B)0000|d={0,1}0111|d={1}10 011|d={0 0}1111|d={1,0 0}
Realz Slaw
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.