Non. Si l'instance 3-SAT a clauses, vous pouvez tester la satisfiabilité en temps O ( m 2 N ) . Puisque N est une constante fixe, il s'agit d'un algorithme à temps polynomial qui résout toutes les instances de votre problème.mO ( m 2N)N
L'algorithme fonctionne en étapes. Soit φ i la formule composée des clauses qui n'utilisent que des variables de x 1 , … , x i . Soit S i ⊆ { 0 , 1 } n l'ensemble des affectations à x i - N , x i - N + 1 , … , x i qui peut être étendu à une affectation satisfaisante pour φ i . Notez que compte tenu de SmφjeX1, … , XjeSje⊆ { 0 , 1 }nXi - N, xi - N+ 1, … , Xjeφje , nous pouvons calculer S i en tempsO( 2 N ): pour chaque( x i - N - 1 ,…, x i - 1 )∈ S i - 1 , nous essayons les deux possibilités pour x i et vérifions si il satisfait toutes les clauses de φ i qui contiennent la variable x i ; si oui, on ajoute( x i - N ,…Si - 1SjeO ( 2N)( xi - N- 1, … , Xi - 1) ∈ Si - 1XjeφjeXje à S i . Dans la i ème étape, nous calculons S i . Une fois que nous avons terminé toutes les m étapes, l'instance 3-SAT est satisfiable si et seulement si S m ≠ ∅ . Chaque étape prend O ( 2 N ) et il y a m étapes, la durée totale de fonctionnement est donc O ( m 2 N ) . Il s'agit d'un polynôme dans la taille de l'entrée, et constitue donc un algorithme polynomial temps.( xi - N, … , Xje)SjejeSjemSm≠ ∅O ( 2N)mO ( m 2N)
Même si vous autorisez un nombre fixe de clauses à violer la contrainte, le problème peut toujours être résolu en temps polynomial. En particulier, si compte le nombre de clauses qui violent la contrainte, vous pouvez résoudre le problème en temps O ( m 2 ( t + 1 ) N ) , en énumérant d'abord toutes les valeurs possibles pour les variables de ces clauses, puis en poursuivant avec l'algorithme ci-dessus. Lorsque t est une constante fixe, il s'agit du temps polynomial. Il peut y avoir des algorithmes plus efficaces.tO ( m 2( t + 1 ) N)t