如何在C ++中最好地实现DPLL?

时间:2012-03-12 18:32:55

标签: c++ algorithm logic artificial-intelligence

我正在尝试用C ++实现DPLL算法,我想知道什么样的数据结构最适合解决这种类型的递归问题。现在我正在使用向量,但代码很长而且很难看。有什么建议吗?

function DPLL(Φ)
   if Φ is a consistent set of literals
       then return true;
   if Φ contains an empty clause
       then return false;
   for every unit clause l in Φ
      Φ ← unit-propagate(l, Φ);
   for every literal l that occurs pure in Φ
      Φ ← pure-literal-assign(l, Φ);
   l ← choose-literal(Φ);
   return DPLL(ΦΛl) or DPLL(ΦΛnot(l));

1 个答案:

答案 0 :(得分:0)

数组适用于表示当前赋值,因为它提供对任何命题的随机访问。为了表示从句,可以使用STL的命题索引集。

要实现一个非常有效的SAT求解器,您将需要更多的数据结构(用于存储观察的文字和解释)。可以在http://poincare.matf.bg.ac.rs/~filip/phd/sat-tutorial.pdf找到对这些概念的可读性介绍。