[英]Invert relation in directed acyclic graph (DAG) to avoid circular relation
題
在有向無環圖(DAG)中 ,是否總是通過反轉要添加的關系來防止由添加關系引起的循環傳遞關系?
例:
A -> B
, B -> C
,由此傳遞關系A -> C
,因此可以看作A -> B -> C
C -> A
會導致A -> B -> C -> A
並且是循環的 C <- A
的關系反轉,這將導致A -> B -> C <- A
,因此仍然是非循環的 這里給出的例子當然相當簡單,所以我很想知道這種方法在所有場景中是否可行。
背景
為了在實體之間建模定向關系(例如'跟隨','先前','父','子'), OpenProject應用程序將其關系信息存儲在有向無環圖(DAG)中 。 實體/節點具有日期信息,並且可以由用戶重新安排。 如果用戶更改日期值,則可能需要自動重新安排其他實體,例如,當前任者在未來兩天轉移時,其后繼者也需要進行轉移。
因為大多數關系用於調度,並且由於這個原因它是非循環圖,所以可以防止循環。 它們會導致無限的調度循環。
雖然大多數關系從語義的角度來看也有一個方向,但也存在通用的“關聯”關系,這種關系對用戶來說是無向的,並且簡單地傳達了存在各種關系的關系。 由於其性質,DAG中存在的“涉及”關系的方向方面對於前端中的用戶是不可見的。
當用戶試圖創建“涉及”關系時,他當前可能遇到警告反對循環關系的錯誤消息,這對用戶來說是不可理解的,因為他對關系的感知是無向的。
對於該問題存在幾種可能的解決方案,並且最簡單的可能是在這種情況下簡單地反轉關系,因為DAG內的方向對於這種關系對用戶而言無關緊要。
您的解決方案似乎有效。 邊緣C -> A
和A -> C
不能同時引起循環。
證明:
如果添加C -> A
將導致循環,則已存在路徑A ↝ C
。 如果添加A -> C
會導致循環,那么就已存在路徑C ↝ A
。 如果上述兩個都是真的,那么組合這兩個路徑將提供已經存在的循環,因此初始圖形將不是DAG。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.