Combien pouvons-nous réduire le nombre de clauses en convertissant

8

Si nous supposons que nous commençons par une instance de k-SAT et essayez de convertir le problème en une instance de (k+m)-SAT, où il y a (k+m) littéraux par clause, pouvons-nous garantir une réduction du montant total des clauses?

J'ai réalisé après la publication que nous ne pouvons pas garantir que le nombre de clauses peut être réduit. Cependant, je me demande si nous avonsn clauses, pourrions-nous obtenir quelque chose comme n/k+O(1) clauses par une technique de "réduction"?

Si oui, dans quelle mesure pouvons-nous garantir que le nombre total de clauses pourra être réduit? Par exemple, si nous commençons park-SAT avec nk clauses, quelle est la plus petite garantie nk+m, le nouveau nombre de clauses, qui résultera si nous convertissons cette instance en (k+m)-SAM?

Plus important encore, comment procéder à cette conversion?

Matt Groff
la source

Réponses:

5

Un type de conversion est simplement l'inverse de la conversion k-sat-à-3-sat:

Rappelons, la conversion de k-sat en "j" -sat, j<k:

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

Ici, dest une variable fictive, ce qui signifie quelque chose comme "Cette clause n'est pas vraie, mais une autre clause que je connais est". L'autre clause étant la prochaine clause qui a été séparée de l'original. Ce qui précède est un exemple où2jk, sinon le 2e nœud divisé sera toujours plus grand que j, et nous devons le diviser à nouveau, de la même manière.

Inverser la conversion

(x1x2...xj)(x¯jxj+1...xk) alors vous pouvez combiner les clauses en:

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

Remarquez les disparus xj dans cette nouvelle formule.

Bien sûr, vous n'êtes pas assuré de trouver des clauses comme celle-ci dans une formule arbitraire, donc la plus petite garantienk+m est égal à nk.

Cependant, sur les formules ordinaires, une variable et sa négation apparaîtront dans la formule; sinon, vous pouvez effectuer une élimination purement littérale (décrite ici ). Pour simplifier, supposons également quek+m2k2. Ensuite, nous pouvons combiner deux clauses qui contiennent un littéral dans l'une et sa négation dans l'autre. Puisque chaque littéral devrait avoir une autre clause avec une négation, on peut supposer empiriquement que vous devriez être en mesure de diviser par deux le nombre de clauses (vous pourriez vous retrouver avec certains littéraux et leurs négations dans des clauses déjà jointes, et donc vous serez coincé avec certaines clauses non joignables à la fin; joindre de manière optimale des clauses comme celle-ci pourrait être un autre problème intéressant).

ÉDITER:

Après réflexion, j'ai réalisé que xjdoit être libre et non utilisé ailleurs dans la formule afin de réduire les deux clauses auxquelles il appartient. Par conséquent, ce type de clauses (l'une contenant un littéral et l'autre sa négation, ce littéral n'étant pas utilisé ailleurs dans la formule) est beaucoup plus rare que je ne le pensais précédemment. Donc, la vraie réponse est, il n'y a aucune garantie de combien nous pouvons réduire le nombre de clauses dans la formule.

Realz Slaw
la source
Comment avez-vous obtenu cette formule de conversion? Cela me semble incorrect, et vous pouvez le vérifier par table de vérité.
Matt Groff
Salut, je l'ai lu il y a longtemps mais vous pouvez le voir ici . J'ai peut-être mal saisi le texte ou, d'une manière ou d'une autre, rendu quelque chose de peu clair dans la conversion; si c'est le cas, n'hésitez pas à le signaler.
Realz Slaw
@MattGroff Je n'arrive pas à trouver mon erreur, pouvez-vous fournir un contre-exemple?
Realz Slaw
Le contre-exemple que j'ai vérifié était de commencer par une seule clause, (AB). J'ai ensuite divisé cela en deux clauses,(Ad)(d¯B), où d¯ indique "non d". Si vous vérifiez cela dans une table de vérité, ils ne devraient pas être égaux. J'attendrai avec impatience d'entendre si vous obtenez les mêmes résultats. En outre, je crois que je sais comment nous pouvons corriger cette réponse afin qu'elle fonctionne , s'il s'avère que la conversion originale de k-SAT en "j" -SAT est incorrecte ...
Matt Groff
ABAB(Ad)(d¯B)0000|d={0,1}0111|d={1}1011|d={0}1111|d={1,0}
Realz Slaw