46得票3回答
路径/小径/步道的定义

许多谓词通过二元关系定义的边构建了一种无环路径,类似于定义传递闭包。因此需要一个通用的定义。 请注意,图论中定义的概念与通常所期望的不完全匹配。特别是,我们对边的名称并不感兴趣。 更糟糕的是,图论也发生了一些变化,引入了walk这个概念,指出: 传统上,路径是指现在通常称为开放式步行的内容。...

27得票1回答
反身传递闭包的定义

许多谓词本质上使用某种形式的传递闭包,但发现必须解决终止问题。为什么不使用 closure0/3 一劳永逸地解决它呢? :- meta_predicate closure0(2,?,?). :- meta_predicate closure(2,?,?). :- meta_predicat...

15得票4回答
在Prolog中定义图:边和路径,查找两个顶点之间是否存在路径。

我对Prolog非常陌生。 我在graph.pl中定义了以下图形: 这是我的Prolog代码:edge(a,e). edge(e,d). edge(d,c). edge(c,b). edge(b,a). edge(d,a). edge(e,c). edge(f,b). path(X,X)...

10得票3回答
在增量构建有向图的同时更高效地计算每个依赖项的传递闭包

我需要回答以下问题:在一个依赖图中,给定一个节点,将其依赖项根据它们自己的传递依赖项分组,这些依赖项会受到特定起始节点的影响。 换句话说,给定依赖图中的一个节点,找到一组直接依赖项的集合,它们具有来自该特定起始节点的共同依赖项。 例如,给定伪代码:let a = 1 let b = 2 l...

9得票2回答
深度优先搜索算法 Prolog

我希望你能帮助我。 我正在尝试学习Prolog中的深度优先搜索算法,我找到了以下代码: go(Start, Goal) :- empty_stack(Empty_been_list), stack(Start, Empty_been_list, Been_list), p...

7得票1回答
如何使用Warshall算法来确定规范的LR(1)分析器闭合集?

我正在尝试实现Warshall算法以快速计算LR(1)闭包。 我认为我理解了它在LR(0)中的工作原理: 图的节点是LR项,例如A → B • C 边是从A → B • C开始的“转换”,到C → • D 问题是,LR(1)需要计算展望集,并且我无法弄清如何将其纳入算法中。即使我知道任...

7得票2回答
Spark示例程序运行非常缓慢

我尝试使用Spark解决简单的图问题。我在Spark源文件夹中找到了一个示例程序:transitive_closure.py,它可以计算具有不超过200个边缘和顶点的图的传递闭包。但是在我的笔记本电脑上运行时,它需要超过10分钟并且无法终止。我使用的命令行是:spark-submit tran...