Skip to content

Lecture 4. CSPs I

Constraint Satisfaction Problems

CSP 全称 Constraint Satisfaction Problems,即约束满足问题

不同于搜索问题必须要找出可行解(最优解),CSP 是识别问题:给定一个状态,只需要判断是否为目标状态,不需要考虑具体的实现

CSP 由三个要素构成:变量、域、约束

  • CSP 拥有一个域(集合)表示 CSP 可以取的所有可能的值
  • 从域中取出的单一的值为变量
  • 约束定义了对变量值的限制

对于一般的 CSP,无法找到一个在多项式时间内解决的方法,即一般的 CSP 属于 NP-Hard 问题,其完整的状态空间往往巨大(对于一个有 \(N\) 个变量、每个变量域大小为 \(O(d)\) 的问题,总共有 \(O(d^{N})\) 种可能的赋值),使用朴素方法(穷举)的时间复杂度是巨大的

以 N 皇后问题为例,对应的 CSP 中:

  • 变量为棋盘上的某一格子位置 \(X_{ij}\)
  • \(X_{ij}\) 的域为 \(\lbrace 0, 1 \rbrace\) 表示 \((i, j)\) 坐标是否存在皇后
  • 约束为:同一行、同一列、同一对角线上只能有一个皇后,总共有 \(N\) 个皇后

如果只需要构造出一个解,该问题是 P 类问题;如果是预先放置部分皇后,问是否可以补齐到 \(N\) 个皇后,该问题是 NP-Complete(NP-Hard)问题;如果需要求出所有解,该问题是 #P-Complete(#P-Hard)问题(解的数量可参考 A000170 - OEIS

对于一个 NP 问题,如果我们从问“是否存在”扩展到问“存在多少”,那么就是 #P 问题,很明显后者比前者更 Hard

如果考虑图搜索(回溯剪枝),后两个问题的时间复杂度为 \(O(N!)\),都无法在多项式时间内解决