Graph 在可达性上使用布尔约束搜索DAG

Graph 在可达性上使用布尔约束搜索DAG,graph,graph-theory,directed-acyclic-graphs,Graph,Graph Theory,Directed Acyclic Graphs,这些查询类似于 返回所有顶点,以便 可从A和B或C到达,但不能从D和E到达 查询可以由任何类型的布尔可达性约束构成 是否有有效的方法快速执行此查询?除了实际查找所有项目的集合,然后在这些集合上执行并集、交集和集减法?我认为使搜索速度比您建议的默认搜索速度更快的唯一方法是计算谓词中每个顶点的集合,然后执行集算术,就是在搜索过程中使用布尔数学,并使用它中止分支 例如,假设我们试图计算可从A或B而不是C到达的集合。在搜索节点时,如果我们位于标记为B的节点上,并且下一个节点中的两个已经分别标记为A和C。

这些查询类似于

返回所有顶点,以便 可从A和B或C到达,但不能从D和E到达

查询可以由任何类型的布尔可达性约束构成


是否有有效的方法快速执行此查询?除了实际查找所有项目的集合,然后在这些集合上执行并集、交集和集减法?

我认为使搜索速度比您建议的默认搜索速度更快的唯一方法是计算谓词中每个顶点的集合,然后执行集算术,就是在搜索过程中使用布尔数学,并使用它中止分支

例如,假设我们试图计算可从A或B而不是C到达的集合。在搜索节点时,如果我们位于标记为B的节点上,并且下一个节点中的两个已经分别标记为A和C。在这三个节点上,谓词减少为:

(B): P = NOT(C)
(A): P = NOT(C)
(C): P = FALSE
因此,没有理由继续搜索这些节点中的任何一个

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