簡體   English   中英

如何最好地在 C++ 中實現 DPLL?

[英]How to best implement DPLL in C++?

我正在嘗試用 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));

數組非常適合表示當前的賦值,因為它提供對任何命題的隨機訪問。 為了表示子句,可以使用 STL 的命題索引集。

要實現非常高效的 SAT 求解器,您將需要更多數據結構(用於存儲觀察到的文字和解釋)。 可以在http://poincare.matf.bg.ac.rs/~filip/phd/sat-tutorial.pdf 中找到對這些概念的非常易讀的介紹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM