问题标签 [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.
recursion - 用递归规则编写序言?“错误:超出本地堆栈”
鉴于以下事实:
- 杰克比尼克聪明
- 尼克比韦斯聪明
- 韦斯比迪克聪明
编写一个递归程序,确定 Jake 的比 Dik 的聪明。
我的解决方案是:
输出:
但是当我交换它时:
输出将显示“错误:超出本地堆栈”我需要输出显示“假”。我如何解决它?
谢谢
owl - 在 Protégé 中使用传递角色进行推理
我在 Protégé 中对传递角色进行推理时遇到问题。
我创建了一个简单的本体,上面写着:
“任何杆都是某些引擎的一部分。”
“任何引擎都是汽车的一部分。”
“PartOf 关系是传递的。”
我希望 Protégé 在 DL 度量中将这个 DL 识别为 S,并推断“任何杆都是某些汽车的一部分”,但它似乎只是忽略了传递性公理。问题是为什么。
(我使用了不同版本的 Protégé(4.3 和 5.0)和不同的推理器。我怀疑我没有设置一些重要的复选框选项。)
我附上我的本体:
c++ - 提升 BGL 传递减少
我尝试使用boost的transitive_reduction,但我不知道如何使用它。
我有一个用以下定义的图表:
我想调用该方法:
我不知道“g_to_tr_map_stor”和“g_to_tc_map_stor”必须使用的类型。
根据我阅读的信息,它必须是从顶点
到整数的映射。我尝试了多种地图但没有成功。
一些想法?
谢谢
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)并将它们标记为组就足够了。
prolog - prolog中的递归引用
我在尝试实施时遇到了一些问题
当我问时?- friends(mia, X).
,它用完了本地堆栈。
然后我添加
我问 ?- friends(mia, X).
,它一直在回复X = mia
。
我不明白,为什么它是递归的?
prolog - 在 prolog 中退出本地堆栈
我不知道为什么我写的这段代码不起作用。
例如:
search - 带约束的 prolog 递归搜索
我有一所房子,房间的房间定义为何时可以从一个房间到另一个房间,例如。
我试图弄清楚如何做到这一点,以便玩家只有在拥有特定物品时才能从一个房间到另一个房间,例如当物品 = 手套时你只能在厨房里。
尝试使用以下方法定义 canbein:
但这不起作用!
已经这样定义了我的项目,不确定这是否正确:
基本上,我是否正确声明了我的项目值?我如何使用特定的项目值使 canget x to y false?
谢谢!
prolog - 路径/小径/步行的定义
许多谓词定义了某种从通过二元关系定义的边构建的非循环路径,与定义传递闭包非常相似。因此需要一个通用的定义。
请注意,图论中定义的概念并不容易与通常预期的相匹配。最值得注意的是,我们对边缘的名称不感兴趣。
更糟糕的是,图论也发生了一些变化,引入了walk的概念,注意到
传统上,路径指的是现在通常称为开放式步行的路径。如今,当没有任何限定的情况下,路径通常被理解为简单,这意味着没有顶点(因此没有边)重复。(术语链也被用来指代所有顶点和边都不同的游走。)
所以我的问题是:如何命名和定义这个功能?
到目前为止我所做的是定义:
第一个论点必须是关系的延续,这是一个不完整的目标,缺少两个进一步的论点。然后是Path
顶点或顶点对。
示例用法
执行
algorithm - 计算邻接表中每个顶点的可达性
给定一个 DAG 的邻接列表Map<Vertex, Set<Vertex>>
,我想计算每个顶点的可达性(即是否存在从 u 到 v 的路径)。
static Map<Vertex, Set<Vertex>> reachability(Map<Vertex, Set<Vertex>> adjList) {}
我知道使用 Floyd-Warshall 是可能的O(V^3)
但是我有一个稀疏图(和一个邻接表),那么最快的方法是什么?
prolog - 我需要“基本步骤”来对 Prolog 进行递归吗?
我正在我的大学学习 Prolog,但我遇到了一个问题。请注意,我是 Prolog 的新手,我什至不知道 Prolog 元素的正确拼写。
我需要在我的 .pl 文件中定义一个递归规则,我不知道我是否需要在我的规则上添加一个“基本步骤”。检查我的规则:
这是有效的,但我不能做类似下面的事情吗?
当我recur_disciplinas(X,Y) :-
两次声明相同的“规则名称”( ) 时会发生什么?发生有点像覆盖?
我目前正在使用swi-prolog。十分感谢大家!