加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 有向无环图(DAG)中的反转关系,以避免循环关系

发布时间:2020-12-17 02:57:25 所属栏目:百科 来源:网络整理
导读:题 在directed acyclic graph (DAG)中,通过反转要添加的关系,总是会阻止通过添加关系引起的循环传递关系吗? 例: 现有关系:A – B,B – C,并且通过该传递关系A – C,因此它可以被视为A – B – C 要添加的关系:C – A会导致A – B – C – A和循环 想法:

在directed acyclic graph (DAG)中,通过反转要添加的关系,总是会阻止通过添加关系引起的循环传递关系吗?

例:

>现有关系:A – > B,B – > C,并且通过该传递关系A – > C,因此它可以被视为A – > B – > C
>要添加的关系:C – > A会导致A – > B – > C – > A和循环
>想法:将要添加到C <-A的关系反转,这将导致A - >; B - > C< -A因此仍然是非环状的
这里给出的例子当然相当简单,所以我很想知道这种方法在所有场景中是否可行.

背景

为了对实体之间的定向关系(例如“跟随”,“前”,“父”,“子”)进行建模,OpenProject应用程序将其关系信息存储在directed acyclic graph (DAG)中.实体/节点具有日期信息并且可以由用户重新安排.如果用户更改日期值,则可能需要自动重新安排其他实体,例如,当前任转移到未来两天时,它的继任者也需要转移.

因为大多数关系用于调度,并且由于这个原因它是非循环图,所以可以防止循环.它们会导致无限的调度循环.

虽然大多数关系从语义的角度来看也有一个方向,但也存在通用的“关联”关系,这种关系对用户来说是无向的,并且简单地传达了存在各种关系的关系.由于其性质,DAG中存在的“涉及”关系的方向方面对于前端中的用户是不可见的.

当用户试图创建“涉及”关系时,他当前可能遇到警告反对循环关系的错误消息,这对用户来说是不可理解的,因为他对关系的感知是无向的.

对于该问题存在几种可能的解决方案,并且最简单的可能是在这种情况下简单地反转关系,因为DAG内的方向对于这种关系对用户而言无关紧要.

解决方法

您的解决方案似乎有效.边缘C – > A和A – > C不能同时造成循环.

证明:

如果添加C – > A会导致一个循环,然后已经存在路径A?C.如果添加A – > C将导致一个循环,然后已经存在路径C?A.如果上述两个都是真的,那么组合这两个路径将提供已经存在的循环,因此初始图形将不是DAG.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读