Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 什么是最理想的;“最通用的统一体”;算法?_Algorithm_Prolog_Logic_Scheme_Unification - Fatal编程技术网

Algorithm 什么是最理想的;“最通用的统一体”;算法?

Algorithm 什么是最理想的;“最通用的统一体”;算法?,algorithm,prolog,logic,scheme,unification,Algorithm,Prolog,Logic,Scheme,Unification,问题 最有效的MGU算法是什么?它的时间复杂性是什么?在堆栈溢出回答中描述它是否足够简单 我一直试图在谷歌上找到答案,但一直在寻找只能通过ACM订阅才能访问的私人PDF 我在SICP中发现了一个讨论: 解释什么是“最通用的统一算法”: 取两个包含“自由变量”和“常量”的表达式树。。。e、 g 所谓“最一般”,意思是您可以改为绑定{x↦ 1} 和{z↦ 1} 这也会使e1和e2等效,但会更具体 SICP的文章似乎暗示它相当昂贵 关于信息,我之所以问这个问题,是因为我知道类型推断也涉及这种“统一”算

问题

最有效的MGU算法是什么?它的时间复杂性是什么?在堆栈溢出回答中描述它是否足够简单

我一直试图在谷歌上找到答案,但一直在寻找只能通过ACM订阅才能访问的私人PDF

我在SICP中发现了一个讨论:

解释什么是“最通用的统一算法”: 取两个包含“自由变量”和“常量”的表达式树。。。e、 g

所谓“最一般”,意思是您可以改为绑定
{x↦ 1} 
{z↦ 1} 
这也会使
e1
e2
等效,但会更具体

SICP的文章似乎暗示它相当昂贵


关于信息,我之所以问这个问题,是因为我知道类型推断也涉及这种“统一”算法,我想了解它。

实践中使用的简单算法(例如在Prolog中)对于病理病例是指数型的

[Martelli and Montanari][1]提出了一种理论上更有效的算法(IIRC,它是线性的),但对于实际中发生的简单情况,该算法的速度要慢得多,因此使用不多

[1] 出版了几种统一算法,用于句法统一和等式统一


他们说他们的第三个句法统一算法(在第2.3节)在
O(n×α(n))
中运行,其中
α(n)
是逆阿克曼函数-在实际情况下,它相当于一个小常数。

你知道描述它的文档吗?它与SICP中描述的基本相同吗?是的,简单算法与SICP中描述的基本相同。通常的演示使用诸如分解、碰撞、发生检查等规则,因此您可能需要搜索这些规则。 e1 = (+ x? (* y? 3) 5) e2 = (+ z? q? r?)
mgu(e1, e2) = { x ↦ z,
                q ↦ (* y 3),
                y ↦ unbound,
                r ↦ 5 }