在可达性上搜索具有布尔约束的DAG

时间:2010-05-03 07:36:32

标签: graph graph-theory directed-acyclic-graphs

查询类似于

返回所有顶点 (可从(A和(B或C)))和(不能从(D和E)到达)。

可以使用任何类型的可达性布尔约束来形成查询。

是否有快速执行此查询的有效方法?除了实际找到所关注的所有项目可到达顶点的集合,然后在这些集合上进行联合,交叉和设置减去?

1 个答案:

答案 0 :(得分:0)

我认为使搜索速度超过你建议的默认值(计算谓词中每个顶点可到达的集合,然后设置算术)的唯一方法是在搜索过程中使用布尔数学,并使用它会中止分支。

例如,假设我们正在尝试计算可从((A或B)而不是C)到达的集合。当搜索节点时,如果我们在标记为(B)的节点上,则“下一个”节点中的两个分别已经标记为(A)和(C)。在这三个节点上,谓词简化为:

(B): P = NOT(C)
(A): P = NOT(C)
(C): P = FALSE

因此没有理由继续搜索这些节点。

(当然,如果我们要在同一个DAG上计算多个集合,我们应该保留这些标记。)