所以我在教科书中遇到了这个问题。我想知道如何将图形可达性问题简化为SAT(CNF)问题。 (即,只要在图G中存在从起点到终点的路径,公式就可以满足)
1)我无法确定如何从多项式时间内可以解决的问题(图形可到达性)转到NP(SAT)。
2)我似乎找不到一种方法来将Graph的这些节点/边表达为CNF中与可达性相对应的实际子句。
我试图考虑像Floyd-Warshall这样的算法,该算法确定从起点到终点的路径是否存在,但我似乎无法将其表达为实际的CNF子句。帮助将不胜感激!
答案 0 :(得分:1)
想出您期望的答案可能并不难,但是这里是 real 答案:
将问题 X 减少为问题 Y 是指将 X 的任何实例转换为 Y ,这样 Y 的答案就会提供 X 的答案。通常,我们需要减少P时间,即问题的转化和答案的提取都必须在多项式时间内进行。
图可到达性很容易在线性时间(肯定是多项式时间)中求解,因此从图可到达性到SAT的简化非常简单:
答案 1 :(得分:0)
几年前,我们做了与您的任务相似的事情。我们的方法完全基于Floyd-Warshall(F.-W.)算法。 直观地,您想要这样的事情:
正式一点:
nodes <- get_nodes_from_path(path)
node_lits <- logical_and([n.literal for n in nodes])
path_lit <- get_new_literal()
的 new 文字path_clause <- if_then_else(node_lits, path_lit)
最后,您可以执行以下操作:
all_paths <- exactly_one(all_path_clauses)
all_paths <- True
SAT解算器将被迫选择路径之一,这将导致选择相应的节点。
答案 2 :(得分:0)
关于第一个问题:由于您仅在设计一种将P中的问题简化为NP中的问题的方法(而不是相反的方法),因此这实际上不是问题。您可以将任何Graph可达性问题转换为SAT问题,但这并不意味着您可以将任何SAT问题均转换为Graph Reachability问题。