почему 2-CNF SAT находится в P
Потому что есть полиномиальный алгоритм для его решения.
Черновой набросок доказательства:
Обратите внимание, что любое предложение в 2-CNF имеет вид A => B
, где A
и B
являются либо переменными, либо их отрицанием. Следовательно, мы можем сказать, что в этом пункте говорится, что когда A истинно, это заставляет B быть истинным. Это также означает, что B ложно заставляет A быть ложным. Мы должны рассмотреть это позже.
Теперь, вы можете взять переменную одну за другой и найти, если она транзитивно заставляет себя быть ее отрицательной (A => B => C => ... => non A) и наоборот (не A) => ... => А). Если первое верно, A должно быть ложным; если второе, А это правда. Если оба, формула неудовлетворительная.
Если вы не найдете ни одной переменной, которая делает формулу неудовлетворительной, она выполнима.
Обратите внимание, что этот "брутальный" алгоритм не является реальным алгоритмом, использующим сильно связанные компоненты графа, о котором я рекомендую вам прочитать. Тем не менее, он является полиномиальным (поиск одной переменной явно O (N ^ 2), так как вы заставляете одну переменную за раз, учитывая O (N) предложения, и вы рассматриваете O (N) переменных, что означает, что алгоритм является полиномиальным) , Обратите внимание, что тот факт, что в предложении содержится не более двух литералов, имеет решающее значение. Если бы пункты были A => B or C
или что-то еще, это не сработало бы так хорошо.