问题标签 [transitive-closure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
867 浏览

recursion - 用递归规则编写序言?“错误:超出本地堆栈”

鉴于以下事实:

  • 杰克比尼克聪明
  • 尼克比韦斯聪明
  • 韦斯比迪克聪明

编写一个递归程序,确定 Jake 的比 Dik 的聪明。

我的解决方案是:

输出:

但是当我交换它时:

输出将显示“错误:超出本地堆栈”我需要输出显示“假”。我如何解决它?

谢谢

0 投票
1 回答
638 浏览

owl - 在 Protégé 中使用传递角色进行推理

我在 Protégé 中对传递角色进行推理时遇到问题。

我创建了一个简单的本体,上面写着:

“任何杆都是某些引擎的一部分。”

“任何引擎都是汽车的一部分。”

“PartOf 关系是传递的。”

我希望 Protégé 在 DL 度量中将这个 DL 识别为 S,并推断“任何杆都是某些汽车的一部分”,但它似乎只是忽略了传递性公理。问题是为什么。

(我使用了不同版本的 Protégé(4.3 和 5.0)和不同的推理器。我怀疑我没有设置一些重要的复选框选项。)

我附上我的本体:

0 投票
1 回答
726 浏览

c++ - 提升 BGL 传递减少

我尝试使用boost的transitive_reduction,但我不知道如何使用它。

我有一个用以下定义的图表:

我想调用该方法:

我不知道“g_to_tr_map_stor”和“g_to_tc_map_stor”必须使用的类型。

根据我阅读的信息,它必须是从顶点
到整数的映射。我尝试了多种地图但没有成功。

一些想法?

谢谢

0 投票
1 回答
654 浏览

sql - 在 SQL 中标记两列的组(如果可能,BigQuery SQL)

给定一张桌子

如果任何两个名称共享相同的 ip,则它们属于同一组。同名的ip也属于同一组。如果您找到 ip 1、{A,B,C} 的所有名称,那么您应该在同一组 {1,2} 中包含与 {A,B,C} 关联的所有 ip,然后再包含所有具有这些 ip 的名称尚未包含 {E} 等等。在此特定示例中,{A,B,C,E} x {1, 2} 中的任何内容都将位于同一组中。上表的结果将是

只是要清楚:

如果名称 A、B 和 C 都是 ip 1 则它们被组合在一起,你应该有

如果名称 A、B 也共享 ip 2,那么他们不应该创建一个新组,而是应该在同一个组中,如下所示:

目标是在 Google BigQuery SQL 中解决这个问题。

到目前为止我有

这会产生一个 ip 的所有名称并给出一个组,但没有找到一个名称的所有 ip 或找到包含所有名称和 ip 的所有对的组。

请注意,您可以使用 split 来访问连接的名称(在这种情况下使用 ',')。

更新 - 这称为传递闭包。如果这太难了,那么展示如何只进行传递闭包的第一次迭代(如何找到与每个 ip 关联的所有名称相关联的所有 ip)并将它们标记为组就足够了。

0 投票
2 回答
448 浏览

prolog - prolog中的递归引用

我在尝试实施时遇到了一些问题

当我问时?- friends(mia, X).,它用完了本地堆栈。

然后我添加

我问 ?- friends(mia, X).,它一直在回复X = mia

我不明白,为什么它是递归的?

0 投票
1 回答
83 浏览

prolog - 在 prolog 中退出本地堆栈

我不知道为什么我写的这段代码不起作用。

例如:

0 投票
1 回答
88 浏览

search - 带约束的 prolog 递归搜索

我有一所房子,房间的房间定义为何时可以从一个房间到另一个房间,例如。

我试图弄清楚如何做到这一点,以便玩家只有在拥有特定物品时才能从一个房间到另一个房间,例如当物品 = 手套时你只能在厨房里。

尝试使用以下方法定义 canbein:

但这不起作用!

已经这样定义了我的项目,不确定这是否正确:

基本上,我是否正确声明了我的项目值?我如何使用特定的项目值使 canget x to y false?

谢谢!

0 投票
3 回答
3495 浏览

prolog - 路径/小径/步行的定义

许多谓词定义了某种从通过二元关系定义的边构建的非循环路径,与定义传递闭包非常相似。因此需要一个通用的定义。

请注意,图论中定义的概念并不容易与通常预期的相匹配。最值得注意的是,我们对边缘的名称不感兴趣。

更糟糕的是,图论也发生了一些变化,引入了walk的概念,注意到

传统上,路径指的是现在通常称为开放式步行的路径。如今,当没有任何限定的情况下,路径通常被理解为简单,这意味着没有顶点(因此没有边)重复。(术语链也被用来指代所有顶点和边都不同的游走。)

所以我的问题是:如何命名和定义这个功能?

到目前为止我所做的是定义:

第一个论点必须是关系的延续,这是一个不完整的目标,缺少两个进一步的论点。然后是Path顶点或顶点对。

示例用法

执行

0 投票
2 回答
1263 浏览

algorithm - 计算邻接表中每个顶点的可达性

给定一个 DAG 的邻接列表Map<Vertex, Set<Vertex>>,我想计算每个顶点的可达性(即是否存在从 u 到 v 的路径)。

static Map<Vertex, Set<Vertex>> reachability(Map<Vertex, Set<Vertex>> adjList) {}

我知道使用 Floyd-Warshall 是可能的O(V^3)

但是我有一个稀疏图(和一个邻接表),那么最快的方法是什么?

0 投票
3 回答
160 浏览

prolog - 我需要“基本步骤”来对 Prolog 进行递归吗?

我正在我的大学学习 Prolog,但我遇到了一个问题。请注意,我是 Prolog 的新手,我什至不知道 Prolog 元素的正确拼写。

我需要在我的 .pl 文件中定义一个递归规则,我不知道我是否需要在我的规则上添加一个“基本步骤”。检查我的规则:

这是有效的,但我不能做类似下面的事情吗?

当我recur_disciplinas(X,Y) :-两次声明相同的“规则名称”( ) 时会发生什么?发生有点像覆盖?

我目前正在使用swi-prolog。十分感谢大家!