SAT问题(Boolean satisfiability problem)(布尔可满足性问题)

1.组成SAT问题的三要素

  • m个逻辑变元(variable)的集合: \(x_1, x_2,…, x_m\)
  • 文字(literal)的集合:一个文字就是一个逻辑变元或其非。这样,全部基本式为:\(x_1, \overline {x_1}, x_2, \overline {x_2}…, x_m, \overline {x_m}\)
  • n个子句(clause)的集合: \(C_1, C_2,…, C_n\) ,其中每个子句是由逻辑或连接的文字组成,子句中文字的个数称为子句的长度。例如, \(C_1= x_1∨\overline {x_3}∨x_7\)就是一个长度为3的子句。
    所谓SAT问题就是确定是否存在一组变量的逻辑取值使得合取范式\(C_1∧C_2∧… ∧C_n\)的值为真。

2. SAT算例举例说明

2.1 一个简单的SAT算例

  • 算例(Instance)
    \(C_1=x_1∨x_2∨x_3∨x_4\)
    \(C_2=x_1∨\overline{x_2}∨\overline{x_4}\)
    \(C_3=\overline{x_2}∨x_3\)
    \(C_4=x_3∨\overline{x_4}\)
  • 该算例的逻辑变元(variable):\(x_1, x_2, x_3, x_4\)
  • 该算例的文字(literal):\(x_1, x_2, x_3, x_4, \overline{x_2}, \overline{x_4}\)
  • 该算例的子句(clause):\(C_1, C_2, C_3, C_4\)

2.1 算例的解

  • 如果能找到一组变元的赋值,使得算例满足,即\(C_1∧C_2∧C_3∧C_4=1\),就可以说该算例是满足的(SAT)。
    例如:若赋值分配为\((x_1=1, x_2=0, x_3=1, x_4=0)\),则\(C_1=1, C_2=1, C_3=1, C_4=1\), 则算例满足(SAT)。
  • 如果找不到任何一组变元的赋值,使其算例满足,就可以说该算例是不满足的(UNSAT)。
    例如:若赋值分配为\((x_1=0, x_2=1, x_3=0, x_4=1)\),则\(C_1=1, C_2=0, C_3=0, C_4=0\),这组解(这组赋值)并不能使该算例满足(UNSAT)。
posted @ 2024-12-07 21:18  seonwee  阅读(706)  评论(0)    收藏  举报