表格逻辑编程中的近似剪枝技术解析
1. 剪枝操作的范围与外部需求
在逻辑编程的剪枝操作中,我们首先需要明确剪枝操作的范围。剪枝操作的范围被定义为从正在移除的边出发,通过生成器可达的树的集合。
给定一个需求图 DG(N, E, QN) 和一条边 e ∈ E (该边是 once 操作的直接对象), once 操作的范围定义如下:
[scope(e, DG) = {e’ \in reachG(e, DG)}]
我们的算法基于这样一个原则:剪枝操作只能移除其范围内出现的树。但需要注意的是,某棵树出现在范围内并不意味着它没有需求。在需求图中,可能存在其他边将范围外的节点连接到该树,从而创建一条从查询树到该树的替代路径,而不使用正在移除的边。这种替代的需求来源被称为外部需求。
例如,在图 3 所示的情况中,当边 2 被剪枝时,此时的范围包括时间戳为 2、3 和 4 的树。但边 6 对树 4 施加了外部需求,因此这棵树不能被删除。在这种情况下,近似剪枝会移除边 2,但由于范围内存在外部需求,不会删除任何树。
为了检测给定范围是否有外部需求,我们需要检查进入该范围内树的所有边。如果这些边的任何一个源树不在此范围内,那么就存在外部需求;否则,该范围没有需求。外部需求的定义如下:
[external demand(e, DG(N, E, QN)) \Leftrightarrow \exists e’ \in E | source(e’) \notin scope(e, DG) \land dest(e’) \in scop
近似剪枝技术在表格逻辑编程中的应用
超级会员免费看
订阅专栏 解锁全文
20

被折叠的 条评论
为什么被折叠?



