线性表列策略与优化
编程语言
2007-05-25 v1
摘要
近年来,名为线性表列(linear tabling)的迭代方法因其简单性、易于实现以及良好的空间效率而受到广泛关注。线性表列是一个框架,基于处理循环子目标所使用的策略可从中衍生出不同的方法。其中一个决策涉及何时消费和返回答案。本文描述了两种策略,即惰性(lazy)策略和急迫(eager)策略,并对它们进行了定性和定量比较。结果表明,虽然惰性策略具有良好的局部性且非常适合寻找所有解,但急迫策略在速度上与惰性策略相当,且非常适合包含剪枝(cuts)的程序。线性表列依赖深度优先迭代加深而非挂起(suspension)来计算不动点。由最顶层循环子目标表示的每个相互依赖的子目标簇都会被迭代求值,直到其中没有任何子目标能产生新答案为止。对所有循环子目标进行朴素的重评估虽然简单,但在计算上可能不可接受。在本文中,我们还将半朴素优化(semi-naive optimization)引入线性表列,这是一种在逻辑程序自底向上求值中用于避免答案冗余连接的有效技术。我们给出了该技术安全(即可靠且完备)的条件,并提出了一种名为早期答案提升(early answer promotion)的优化技术以增强其有效性。在 B-Prolog 中的基准测试表明,经过此优化,线性表列在速度上与最先进的 SLG 实现相比具有显著优势。
引用
@article{arxiv.0705.3468,
title = {Linear Tabling Strategies and Optimizations},
author = {Neng-Fa Zhou and Taisuke Sato and Yi-Dong Shen},
journal= {arXiv preprint arXiv:0705.3468},
year = {2007}
}
评论
29 pages, 1 figure, TPLP